pat 乙级 1008数组循环右移

it2023-11-16  69

题目链接

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; }

 

最新回复(0)