题干
输入格式:
每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。
输出格式:
在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
输入样例:
6 2
1 2 3 4 5 6
输出样例:
5 6 1 2 3 4
#include <bits/stdc++.h>
using namespace std;
//本题数组从1开始存储
//反转三次,将数组分成两部分,第一次反转前边,第二次反转后边,第三次整个反转
//反转
void reverse(int nums[],int left,int right){
int m;
int mid = (left+right)/2;
for(int i=left;i<=mid;i++){
m=nums[i];
nums[i]=nums[right-(i-left)];
nums[right-(i-left)]=m;
}
}
//循环右移m位
void shiftRight(int nums[],int m,int len){
reverse(nums,1,len-m);
reverse(nums,len-m+1,len);
reverse(nums,1,len);
}
int main(){
int m,n;
cin>>n;
cin>>m;
m=m%n;
int nums[100];
for(int i=1;i<=n;i++)
cin>>nums[i];
if(m!=0) shiftRight(nums,m,n);
for(int i=1;i<=n;i++)
if(i==1) cout<<nums[i];
else cout<<' '<<nums[i];
}