思路: 题目提到数组右移,很自然会想到用数组解决。这里用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,即右移的次数大于整数个数的条件。