直接上代碼:
#include <malloc.h>#include <stdio.h>int main(void){//使用者輸入的值,建立n*n的矩陣int n;//蛇形從1開始計數int count = 1;//a[x][y],x是二維數組的第一個下標,y是第二個。//round是蛇形矩陣的第幾圈,從0開始。int x,y,round;scanf("%d",&n);int (*a)[n] = calloc(n*n,sizeof(int));//如果n是1,則直接輸出。if(n == 1){a[0][0] = count;}else{//下面以n=5為例//一共有2(5/2)圈蛇形for(round=0; round<n/2; round++){/* 以下迴圈執行後輸出如下:1 2 3 4 5*/x = round;for(y=round;y<n-round;y++){a[x][y]=count;count++;}/* 以下迴圈執行後輸出如下:1 2 3 4 5678*/y = n - round - 1;for(x=round+1;x<n-round-1;x++){a[x][y]=count;count++;}/* 以下迴圈執行後輸出如下:1 2 3 4 567813 12 11 109*/x = n - round - 1;for(y=n-round-1;y>=round;y--){a[x][y]=count;count++;}/* 以下迴圈執行後輸出如下:1 2 3 4 516615714813 12 11 10 9*/y = round;for(x=n-round-1-1;x>round;x--){a[x][y]=count;count++;}}/* 上面的大迴圈執行後輸出如下:1 2 3 4 516 17 18 19 615 24 20 714 23 22 21 813 12 11 10 9*/if(n%2 == 1){//如果n值奇數,將最中間的空填上a[n/2][n/2] = count;}}//列印矩陣for(x=0;x<n;x++){for(y=0;y<n;y++){printf("%d ",a[x][y]);}printf("\n");}printf("\n");free(a);return 0;}
執行結果如下:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9