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 分)

PAT乙级1008 数组元素循环右移问题 (20 分)

PAT乙级1008. 数组元素循环右移问题 (20)

PAT 乙级 水题 1008. 数组元素循环右移问题 (20)

PAT乙级1008 数组元素循环右移问题 (20分)

JAVA1008 数组元素循环右移问题 (20分) PAT乙级 PAT (Basic Level) Practice (中文)