给定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; }
原文:https://www.cnblogs.com/keep23456/p/12312176.html