1008 数组元素循环右移问题
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int m=0,n=0;
cin>>n>>m;
vector<int> num(n);
for(int i=0;i<n;i++)
{
cin>>num[i];
}
m=m%n;
if(m!=0)
{
reverse(num.begin(),num.begin()+n);
reverse(num.begin(),num.begin()+m);
reverse(num.begin()+m,num.begin()+n);
}
for(int i=0;i<n-1;i++)
{
cout<<num[i]<<" ";
}
cout<<num[n-1];
return 0;
}
https://www.liuchuo.net/archives/522
/分析:数组长度为n,要想把数组循环右移m位,只需要先将整个数组a倒置,
再将数组前m位倒置,最后将数组后n-m位倒置即可完成循环右移m位~
reverse函数可以实现将一个数组或者vector中元素倒置,这个函数在algorithm头文件中~
(如果m大于n,那么循环右移m位相当于循环右移m%n位,因为那些n倍数位的移动是多余的,
所以在使用m之前,先将m = m%n)/