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
.
一、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]);
}