1. 程式人生 > >蛇形填數和蛇形取數(基礎模擬練習)

蛇形填數和蛇形取數(基礎模擬練習)

code 練習 color 順序 printf urn pri int 蛇形填數

 1 /*
 2 問題 輸入矩陣的規模n,先將數按照下,右,上,左的順序填入矩陣,再按照這樣的順序取出。
 3 解題思路 模擬,按照筆的順序存入取出,註意初始化的時候一定將矩陣全部初始化。 
 4 */ 
 5 #include<cstdio>
 6 #include<cstring>
 7 const int N=1001;
 8 int a[N][N],b[N][N];
 9 int main()
10 {
11     int n,i,j,tot,x,y;
12     while(scanf("%d",&n) != EOF){
13         //蛇形填數 
14
x=0; 15 y=0; 16 tot=0; 17 memset(a,0,sizeof(int)*N*N);//一定要初始化全部,否則出現不可預估的錯誤 18 while(tot < n*n){ 19 while(x < n && !a[x][y]){ 20 a[x][y] = ++tot; 21 x++; 22 } 23 24 x--;
25 y++; 26 while(y < n && !a[x][y]){ 27 a[x][y]=++tot; 28 y++; 29 } 30 31 y--; 32 x--; 33 while(x >= 0 && !a[x][y]){ 34 a[x][y] = ++tot; 35 x--;
36 } 37 38 x++; 39 y--; 40 while(y >= 0 && !a[x][y]){ 41 a[x][y] = ++tot; 42 y--; 43 } 44 45 y++; 46 x++; 47 } 48 for(i=0;i<n;i++){ 49 for(j=0;j<n;j++){ 50 printf("%d ",a[i][j]); 51 } 52 printf("\n"); 53 } 54 //蛇形取數 55 x=0; 56 y=0; 57 tot=0; 58 memset(b,0,sizeof(int)*N*N); 59 while(tot < n*n){ 60 while(x < n && !b[x][y]){ 61 printf("%d ",a[x][y]); 62 b[x][y]=1; 63 ++tot; 64 x++; 65 } 66 x--; 67 y++; 68 while(y < n && !b[x][y]){ 69 printf("%d ",a[x][y]); 70 b[x][y]=1; 71 ++tot; 72 y++; 73 } 74 75 y--; 76 x--; 77 while(x >= 0 && !b[x][y]){ 78 printf("%d ",a[x][y]); 79 b[x][y]=1; 80 ++tot; 81 x--; 82 } 83 84 x++; 85 y--; 86 while(y >= 0 && !b[x][y]){ 87 printf("%d ",a[x][y]); 88 b[x][y]=1; 89 ++tot; 90 y--; 91 } 92 93 y++; 94 x++; 95 } 96 printf("\n"); 97 } 98 return 0; 99 }

蛇形填數和蛇形取數(基礎模擬練習)