1008 数组元素循环右移问题

给定6个元素:1 2 3 4 5 6

要求循环右移2次,结果:5 6 1 2 3 4.

思路:

首先对1 2 3 4取反,结果:4 3 2 1 5 6

然后对5  6取反,结果 :4 3 2 1 6 5,

最后全部取反,结果:5 6 1 2 3 4.即为所求。

注意点,如果元素个数n 小于 要求循环右移次数 m,注意对m取模 :m = m%n;

#include"iostream"
#include"algorithm"
using namespace std;

int a[200] = {0};
int main() {
    int n,m;
    cin>>n>>m;
    for(int i = 0 ; i < n; ++i)
        cin>>a[i];
    m%=n; //如果循环右移次数m大于元素个数n,必须m mod n,否则测试点1,2无法通过
    if(m != 0) {
        reverse(a,a+n-m);
        reverse(a+n-m,a+n);
        reverse(a,a+n);
    }
    for(int i = 0; i < n; ++i) {
        cout<<a[i];
        if(i < n-1)
            cout<<" ";
    }
    return 0;
}

 

 

posted @ 2020-02-15 15:03  tangq123  阅读(173)  评论(0编辑  收藏  举报