1008 數(shù)組元素循環(huán)右移問題 (20 分)
一個數(shù)組A中存有N(>0)個整數(shù),在不允許使用另外數(shù)組的前提下馏段,將每個整數(shù)循環(huán)向右移M(≥0)個位置轩拨,即將A中的數(shù)據(jù)由(A?0??A?1???A?N?1??)變換為(A?N?M???A?N?1??A?0??A?1???A?N?M?1??)(最后M個數(shù)循環(huán)移至最前面的M個位置)。如果需要考慮程序移動數(shù)據(jù)的次數(shù)盡量少毅弧,要如何設計移動的方法气嫁?
輸入格式:
每個輸入包含一個測試用例,第1行輸入N(1≤N≤100)和M(≥0)够坐;第2行輸入N個整數(shù)寸宵,之間用空格分隔。
輸出格式:
在一行中輸出循環(huán)右移M位以后的整數(shù)序列元咙,之間用空格分隔梯影,序列結尾不能有多余空格。
輸入樣例:
6 2
1 2 3 4 5 6
輸出樣例:
5 6 1 2 3 4
分析
使用reverse函數(shù)逆置即可庶香,注意這個m可能比n大甲棍,要對m=m%n處理才可以循環(huán)右移。
代碼
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
? int n,m;
? vector<int>a(n);
? cin>>n>>m;
? for(int i=0;i<n;i++){
? ? cin>>a[i];
? }
? m=m%n;
? if(m!=0){reverse(begin(a),begin(a)+n);
? reverse(begin(a),begin(a)+m);
? reverse(begin(a)+m,begin(a)+n);}
? for(int i=0;i<n;i++){
? ? cout<<a[i];
? ? if(i!=n-1)
? ? cout<<" ";
? }
;? ? return 0;
}