问题描述
从键盘接收两个整数m和n,分别表示一维整型数组的元素个数,和要向移动的位数。已知0<m<=100,以及n>0。
在用户输入m和n后,第二行输入相应个数的数组元素。
程序要实现的功能是,让数组元素往右移动n位。
例如,数组的5个元素是:1,2,3,4,5。
往右移动1位后:5,1,2,3,4
往右移动2位后:4,5,1,2,3
输入格式:
第一行输入两个整数,第二行输入数组元素。
输出格式:
移动后,数组的每一个元素,注意每个数组元素后有且仅有一个空格。
输入样例:
第一行的数据5和2,表示数组容量为5,让数组元素往右移动2个位置。
第二行是数组的每一个元素的值。
5 2
1 2 3 4 5
输出样例:
输出移动后的数组元素值,注意每个元素后有且仅有一个空格。
4 5 1 2 3
思路分析
题目仅仅要求按顺序输出,所以并不需要将数组赋值到另外的数组,只需要操作下标即可
代码实现
#include<stdio.h>
int main(){
int m,n,i,temp;
scanf("%d%d",&m,&n);
int a[m];
for(i=0;i<m;i++) scanf("%d",&a[i]);
for(i=0;i<m;i++){
while(n>m) n-=m;
temp=(m-n+i)%m;
printf("%d ",a[temp]);
}
return 0;
}
更新
添加说明,上述while语句,是为了处理m大于n的情况,经过while循环之后无论m比n大多少都能限制在0-n之间