1 /* 2 * Main.c 3 * 1008. 数组元素循环右移问题 Ver.2 4 * Created on: 2014年8月29日 5 * Author: Boomkeeper 6 ********测试通过******* 7 */ 8 #include <stdio.h> 9 10 int main(void) { 11 12 int array[101]; 13 int n, m; //题目中的N、M 14 int i,j; 15 16 scanf("%i %i", &n, &m); 17 getchar(); 18 19 for (i = 0; i < n; i++) { 20 scanf("%i", &array[i]); 21 } 22 //将m限制在0~n的范围 23 // while (m > n) { 24 // m /= n; 25 // } 26 //右移 27 int temp; 28 for(i=0;i<m;i++){ 29 temp = array[n-1]; 30 for(j=n-2;j>=0;j--){ 31 array[j+1] = array[j]; 32 } 33 array[0] = temp; 34 } 35 //输出 36 for(i=0;i<n;i++){ 37 if(i==0) 38 printf("%i",array[i]); 39 else 40 printf(" %i",array[i]); 41 } 42 printf(" "); 43 44 return 0; 45 }
如果限制m在0~n的范围,题目提交就会报错,去掉可以通过。这样如果m > n,其实无效循环了好多遍...应该是多循环(m/n)*n遍吧...
1 /* 2 * Main.c 3 * 1008. 数组元素循环右移问题 Ver.1 4 * Created on: 2014年8月29日 5 * Author: Boomkeeper 6 ********部分通过******* 7 */ 8 #include <stdio.h> 9 10 int main(void) { 11 12 int array[101]; 13 int n, m; //题目中的N、M 14 int i; 15 16 scanf("%i %i", &n, &m); 17 getchar(); 18 19 for (i = 0; i < n; i++) { 20 scanf("%i", &array[i]); 21 } 22 //将m限制在0~n的范围 23 while (m > n) { 24 m /= n; 25 } 26 //输出 27 for (i = n - m; i < n; i++) { 28 if (i == n - m) 29 printf("%i", array[i]); 30 else 31 printf(" %i", array[i]); 32 } 33 for (i = 0; i < n - m; i++) 34 printf(" %i", array[i]); 35 printf(" "); 36 37 return 0; 38 }
这个算法就没有完全通过,不懂了...如果不限制m范围的话,就会数组越界。
题目链接:
http://pat.zju.edu.cn/contests/pat-b-practise/1008
.