题目链接
https://pintia.cn/problem-sets/994805260223102976/problems/994805316250615808
数组循环右移算法:
对数组进行三次倒换如下:
对N个数全部倒换对前M个倒换对后N-M倒换输入:
6 2 1 2 3 4 5 6输出:
5 6 1 2 3 4代码:
#include <iostream> //倒换的方法 reverse(begin(a),begin(a+n)) 可以实现数组或者向量的倒换 #include <algorithm> #include <vector> using namespace std; //数组元素循环右移 //使用3次倒换,先对所有的N个元素倒换、然后分别对前面M个元素、后面的N-M个元素倒换 //数组长度未知,使用向量 int main(){ int i=0; int N,M; cin>>N>>M; vector<int> a(N); for(i=0;i<N;i++){ cin>>a[i]; } M = M%N; //1 2 3 4 5 6 //M=3 //6 5 4 3 2 1 //4 5 6 3 2 1 //4 5 6 1 2 3 if(M!=0){ //左闭右开 reverse(begin(a),begin(a)+N); reverse(begin(a),begin(a)+M); reverse(begin(a)+M,begin(a)+N); } for(i=0;i<N-1;i++){ cout<<a[i]<<" "; } cout<<a[N-1]<<endl; return 0; }