PAT 1008 数组元素循环右移问题 C++实现 测试点分析。

原题链接

思路: 题目提到数组右移,很自然会想到用数组解决。这里用C++的向量容器vector,相当与C中的动态数组。首先将输入的数字存在容器里,循环右移n个则弹出n个元素储存在新的容器。最后将新容器逆序(reverse)输出,再将原容器正序输出。

C++实现:

#include<iostream>
#include<algorithm>//reverse函数的前置文件
#include<vector>
using namespace std;
int main()
{
	int N,m;
	int t1;
	vector<int > v;
	vector<int > v2;
	cin>>N>>m;
	m=m%N;//关键。 测试点2和3
	while(N--)
	{
		int t;
		cin>>t;
		v.push_back(t);//储存在原容器中
	}
	while(m--)
	{
		t1=v.back();
		v2.push_back(t1);//复制原容器v最后一个元素储存到新容器V2中
		v.pop_back();//同时原容器v最后一个元素弹出
	}
	reverse(v2.begin(),v2.end());//反转
	for(auto x:v2) cout<<x<<" ";
	for(auto it=v.begin();it!=v.end();it++)
	{
		if(it==v.end()-1) cout<<*it;//按格式输出
		else cout<<*it<<" "; 
	}
	return 0;
 } 

经过多次测试发现

测试点0和4是常规条件。
测试点3是M=0,即右移0位的条件。
测试点1和2是M>N,即右移的次数大于整数个数的条件。

更多题解:

PAT乙级题解大全 C++

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值