PAT乙级1008 数组元素循环右移问题 (20 分)
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT乙级1008 数组元素循环右移问题 (20 分)相关的知识,希望对你有一定的参考价值。
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<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;
}
以上是关于PAT乙级1008 数组元素循环右移问题 (20 分)的主要内容,如果未能解决你的问题,请参考以下文章
PAT 乙级 水题 1008. 数组元素循环右移问题 (20)
JAVA1008 数组元素循环右移问题 (20分) PAT乙级 PAT (Basic Level) Practice (中文)