概述
输入格式:
每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。
输出格式:
在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
输入样例:
6 2
1 2 3 4 5 6
输出样例:
5 6 1 2 3 4
代码一:
这个思路就是一个一个得右移,真的移了m次,当然这是完全符合题意的,就是还要两重循环,效率确实有点低。但AC没问题。
#include<stdio.h> //C语言版本
int main(){
int A[105];
int N,M;
if(scanf("%d%d",&N,&M)){
if(N<1||N>100){
printf("N error!n");
return 0;
}
if(M<0){
printf("M error!n");
return 0;
}
int i,temp,j;;
for(i=0;i<N;i++){
if(scanf("%d",&A[i]));
}
for(j=0;j<M;j++){
temp=A[N-1];
for(i=N-1;i>=0;i--){
A[i]=A[i-1];
}
A[0]=temp;
}
for(i=0;i<N;i++){
printf("%d",A[i]);
if(i<N-1) printf(" ");
}
}
return 0;
}
代码二:
思路:现在是22年11月,又二刷了该题,觉得要优化下,换了思路。既然要循环右移m个数,a[0]变成了a[m]。那输入的时候,i直接从m开始呗。有一点需要注意一下,m是可以大于等于n的,需要m=m%n来确定真正右移的位数。
#include<cstdio> // c++版本
int main(){
int n,m;
if(scanf("%d%d",&n,&m));
if(m>=n) m=m%n;
int a[n];
int i;
for(i=m;i<n;i++)
if(scanf("%d",&a[i]));
for(i=0;i<m;i++)
if(scanf("%d",&a[i]));
for(i=0;i<n;i++){
printf("%d",a[i]);
if(i!=n-1) printf(" ");
}
printf("n");
return 0;
}
最后
以上就是开放夕阳为你收集整理的1008 数组元素循环右移问题(分数20)【C语言】&【C++】的全部内容,希望文章能够帮你解决1008 数组元素循环右移问题(分数20)【C语言】&【C++】所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复