一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由变换为(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
输入格式:
每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。
输出格式:
在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
思路
将数组循环移动可以考虑将数组翻转.如果是左移就把0~m - 1反转后反转m~n,然后再将整个数组反转.右移同理
reserve(*begin, *end);//左闭右开
//反转数组A
reverse(A, A + n);
//反转vector
reverse(a.begin(), a.end());
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 110;
int A[N];
int main(){
int n, m;
cin >> n >> m;
for(int i = 0; i < n; i ++ )
cin >> A[i];
reverse(A, A + n - m);
reverse(A + n - m, A + n);
reverse(A, A + n);
for(int i = 0; i < n; i ++ ){
if(i) cout << " ";
cout << A[i];
}
cout << endl;
return 0;
}
网友评论