程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> *1008. 數組元素循環右移問題,1008右移

*1008. 數組元素循環右移問題,1008右移

編輯:關於C語言

*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、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("\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、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("\n");
36 
37     return 0;
38 }

 

這個算法就沒有完全通過,不懂了...如果不限制m范圍的話,就會數組越界。

 

題目鏈接:

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

 

 

.


1008 數組元素循環右移問題 (20),各位解答

一、printf("%d\n",q[s]); 這裡加個回車

二、
for(j=a-b;j<a;j++)
{
printf("%d ",q[j] );
} 當b=a時,你這裡最後一個輸出會是帶空格的!
 

用指針將數組元素循環右移,最後一個元素移到開頭

#include<stdio.h>
main()
{int a[10],i,t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
t=a[9];
for(i=9;i>0;i--)
a[i]=a[i-1];
a[i]=t;
for(i=0;i<10;i++)
printf("%d\n",a[i]);
}
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved