一個(gè)數(shù)組A中存有N(N>0)個(gè)整數(shù)衬衬,在不允許使用另外數(shù)組的前提下,將每個(gè)整數(shù)循環(huán)向右移M(M>=0)個(gè)位置刁笙,即將A中的數(shù)據(jù)由(A0 A1……AN-1)變換為(AN-M …… AN-1 A0A1……AN-M-1)(最后M個(gè)數(shù)循環(huán)移至最前面的M個(gè)位置)破花。如果需要考慮程序移動(dòng)數(shù)據(jù)的次數(shù)盡量少谦趣,要如何設(shè)計(jì)移動(dòng)的方法?
輸入格式:每個(gè)輸入包含一個(gè)測試用例座每,第1行輸入N ( 1<=N<=100)前鹅、M(M>=0);第2行輸入N個(gè)整數(shù)峭梳,之間用空格分隔舰绘。
輸出格式:在一行中輸出循環(huán)右移M位以后的整數(shù)序列,之間用空格分隔延赌,序列結(jié)尾不能有多余空格除盏。
輸入樣例:
6 2
1 2 3 4 5 6
1
2
輸出樣例:
5 6 1 2 3 4
————————————————
由于不能用另外數(shù)組,改變位置比較麻煩挫以,直接采用了選擇性輸出的方法
例如 長度6 數(shù)組2 1 2 3 4 5 6
先從(6-2) 輸出 到6
再從1輸出到6-2
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a[100]={0};
int t,m;
cin>>t>>m; //移動(dòng)個(gè)數(shù) t數(shù)組長度
for(int i=0;i<t;i++){
cin>>a[i];
}
m=m%t; // 1 2 3 4 5 6 t=6 m=2
//第一次輸出 0 1 2 3 4 5
for(int i=t-m;i<t;i++){
cout<<a[i]<<" ";
}
//第二次輸出
for(int i=0;i<t-m;i++){
if(i==t-m-1)
cout<<a[i];
else
cout<<a[i]<<" ";
}
}