首页 > 代码库 > *1008. 数组元素循环右移问题

*1008. 数组元素循环右移问题

 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、M14     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         else40             printf(" %i",array[i]);41     }42     printf("\n");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、M14     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         else31             printf(" %i", array[i]);32     }33     for (i = 0; i < n - m; i++)34         printf(" %i", array[i]);35     printf("\n");36 37     return 0;38 }

 

这个算法就没有完全通过,不懂了...如果不限制m范围的话,就会数组越界。

 

题目链接:

http://pat.zju.edu.cn/contests/pat-b-practise/1008

 

 

.

*1008. 数组元素循环右移问题