https://pintia.cn/problem-sets/994805260223102976/problems/994805316250615808
方法一: 用一个数组保存移动动后的数组
#include<cstdio>
#include<iostream>
using namespace std;
int a[1000];
int b[1000];
int main(void)
{
int n,m;
while(cin>>n>>m)
{
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) b[(i+m)%n]=a[i];
for(int i=0;i<n;i++)
{
cout<<b[i];
if(i!=n-1) cout<<" ";
}
cout<<endl;
}
return 0;
}
方法二: 用队列模拟
#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
int main(void)
{
int n,m; cin>>n>>m;
deque<int> q;
for(int i=0;i<n;i++)
{
int number; cin>>number;
q.push_back(number);
}
while(m--)
{
int number=q.back();
q.pop_back();
q.push_front(number);
}
while(q.size()>1) cout<<q.front()<<" ",q.pop_front();
cout<<q.front();
return 0;
}
#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
deque<int> q;
int n,m;
int main(void)
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
int x; cin>>x;
q.push_back(x);
}
while(m--)
{
int temp=q.back(); q.pop_back();
q.push_front(temp);
}
for(auto t=q.begin();t!=q.end();t++)
{
cout<<*t;
if(t+1!=q.end()) cout<<" ";
}
return 0;
}
第三种方法:
#include<iostream>
using namespace std;
int main(){
int N,M;
int num[100];
scanf("%d %d",&N,&M);
M=M%N;//防止越界
for(int i=0;i<N;i++){
scanf("%d",&num[i]);
}
for(int i=N-M;i<N;i++){
printf("%d ",num[i]);
}
for(int i=0;i<N-M;i++){
if(i!=0) printf(" ");
printf("%d",num[i]);
}
return 0;
}