*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、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

.

原文地址:https://www.cnblogs.com/boomkeeper/p/1008b.html