56 循环数组
作者: 江宝钏时间限制: 1S章节: 函数
问题描述 :
编写程序,将一维数组中的元素向右循环移动N次。
输入说明 :
第一行整数n,表示数组大小为n
第二行,n个数,表示数组中的n个元素。
第三行,整数N,表示数组向右移动N次。
输出说明 :
移动后的数组元素,每两个元素之间以一个空格分隔。行首与行尾无多余空格。
输入范例 :
10
1 2 3 4 5 6 7 8 9 10
4输出范例 :
7 8 9 10 1 2 3 4 5 6
笔记
这题给的范例有些诱导性,容易让人忽略掉一些东西。
实际上,这题需要考虑到几个特殊情况:
- 向右移动0次;
- 向右移动的次数超过数组长度。
第一种情况很容易处理。
对于第二种情况,对移动次数做一次取模操作即可。
关键代码:
i = (n-N%n)%n;
i:移动后头元素的下标;
n:数组长度;
N:向右循环移动的次数。
代码
#include<stdio.h>
int main(){
int n,N;
int a[1001];
scanf("%d",&n);
int i;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&N);
i = (n-N%n)%n;
int len = n;
int flag = 1;
while(len){
if(flag) flag = 0;
else printf(" ");
printf("%d",a[i]);
i = (i+1)%n;
len--;
}
printf("\n");
return 0;
}