原题链接如下:
1008.数组元素循环右移问题
解题思路:
首先我们应该注意的是题目中并没有给定M的最大值,这是一个坑,所以我们不能直接认为M<N,所以我们需要在读入M和N之后,令M%N,这样就可以保证M<N了,同时也能使后面的操作更加简便,这样做的依据是:对一个长度为N的序列,右移N位之后的序列和当前序列是相同的
得到新的M之后,我们观察片刻便知,我们可以先直接输出N-M号到N-1号元素,然后再输出0到N-M-1号元素即可
注意点:
处理最后一个数字之后不输出空格可以使用count变量来记录,每输出一个数字,count变量+1,只要count没达到N,就输出空格
代码如下:
#include<stdio.h>
int main(){
int n,m,count =0;//count为最后结尾的空格做准备
int a[110];
scanf("%d%d",&n,&m);
//因为我们不能确定m,n和的大小关系,如果m大于n,则我们需要取余处理
m=m%n;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
//因此我们只需要先输出n-m一直到n-1号元素
for(int i=n-m;i<n;i++){
printf("%d",a[i]);
count++;
if(count<n){printf(" ");}
}
//然后再输出0到n-m-1号元素
for(int i=0;i<n-m;i++){
printf("%d",a[i]);
count++;
if(count<n){printf(" ");}
}
return 0;
}