c語言編寫螺旋矩陣!
【問題描述】
輸出下面的n(3≤n≤19)階螺旋矩陣。輸入n(=10),輸出如下左圖所示的螺旋矩陣。輸入-n(=-10),輸出如下右圖所示的螺旋矩陣。
1 2 3 4 5 6 7 8 9 10 36 37 38 39 40 41 42 43 44 11 35 64 65 66 67 68 69 70 45 12 34 63 84 85 86 87 88 71 46 13 33 62 83 96 97 98 89 72 47 14 32 61 82 95 100 99 90 73 48 15 31 60 81 94 93 92 91 74 49 16 30 59 80 79 78 77 76 75 50 17 29 58 57 56 55 54 53 52 51 18 28 27 26 25 24 23 22 21 20 19 | 1 36 35 34 33 32 31 30 29 28 2 37 64 63 62 61 60 59 58 27 3 38 65 84 83 82 81 80 57 26 4 39 66 85 96 95 94 79 56 25 5 40 67 86 97 100 93 78 55 24 6 41 68 87 98 99 92 77 54 23 7 42 69 88 89 90 91 76 53 22 8 43 70 71 72 73 74 75 52 21 9 44 45 46 47 48 49 50 51 20 10 11 12 13 14 15 16 17 18 19 |
輸入格式
輸入一個整數n或(-n),n表示要輸出螺旋矩陣的階數。
輸出格式
輸出右旋或左旋n階螺旋矩陣。
#include<stdio.h> #include<math.h> #define max 21 int a[max][max],i,j,c=1,count=1; void Fun(int n,int N,int b) { if(c<=c+n-1&&c<=N)//對框架上側邊的輸出 { for(j=count;j<=n;j++) { a[count][j]=c; c++; } } if(c<=c+n-2&&c<=N)//對框架右側邊的輸出 { for(i=count+1;i<=n-1;i++) { a[i][n]=c; c++; } } if(c<=c+n-2&&c<=N)//對框架下側邊的輸出 { for(j=n;j>=count;j--) { a[n][j]=c; c++; } } if(c<=c+n-3&&c<=N)//對框架左側邊的輸出 { for(i=n-1;i>=count+1;i--) { a[i][count]=c; c++; } } count++;//讓框架縮小為裡邊一層 if(c<=N) Fun(n-1,N,b); //輸出矩陣 else { for(i=1;i<=sqrt(N);i++) { for(j=1;j<=sqrt(N);j++) if(b>0) printf("%d\t",a[i][j]);//右旋的螺旋矩陣 else printf("%d\t",a[j][i]);//左旋的螺旋矩陣(以右旋的螺旋矩陣為基礎,將行與列交換即可) printf("\n"); } } } int main() { int n,N,b;//N代表矩陣中的最大值 printf("請輸入一個n值:"); while(~scanf("%d",&n)) { c=1;count=1; N=n*n; b=n; if(n<0) n=-n; if(n==0) break; else Fun(n,N,b); printf("請輸入一個n值,若結束請輸入0:"); } return 0; }
在這裡,將右旋的螺旋矩陣編好後,左旋矩陣其實就是轉置一下矩陣,可以節省很多的空間與時間去重新敲寫程式碼,而且看上去更加的簡介。