提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
题目
一、代码
旧代码
#include<iostream>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int a[n];
if(m>n) m%=n;
for(int i=0;i<n;i++){
int b;
cin>>b;
if(i+m<n) a[i+m]=b;
else a[i+m-n]=b;
}
for(int i=0;i<n;i++){
cout<<a[i];
if(i<n-1) cout<<" ";
}
return 0;
}
改进后代码
#include<iostream>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int a[n];
for(int i=0;i<n;i++){
int b;
cin>>b;
a[(i+m)%n]=b;
}
for(int i=0;i<n;i++){
cout<<a[i];
if(i<n-1) cout<<" ";
}
return 0;
}
二、分析
新旧代码主要在元素移动上
旧:
if(i+m<n) a[i+m]=b;
else a[i+m-n]=b;
改进后:
a[(i+m)%n]=b;
主要是最近循环队列写得多,记下了循环队列入队操作,本题类似于循环队列入队操作。
Q.rear=(Q.rear+1)%maxsize;
该操作比旧代码在逻辑上简便很多。