以層數 n 為循環變量,每層四段:
arr[n][n] → arr[n][col-1-n]arr[n+1][col-1-n] → arr[row-1-n][col-1-n]arr[row-1-n][col-2-n] → arr[row-1-n][n]arr[row-2-n][n] → arr[n+1][n]層數 n = 0 .. min(row,col)/2 - 1。計數器 num 從 1 遞增至 row*col,滿則提前跳出。
#define ROW 5
#define COL 4
int a[ROW][COL]={0}, n=0, val, num=1;
val = ROW 0; val-=2, n++) {
for (int i=n,j=n; i=n && num<=ROW*COL; i--,num++) a[i][j]=num;
for (++i,--j; j>n && num<=ROW*COL; j--,num++) a[i][j]=num;
}
// 打印矩陣...
同理,四段順序改為:向下 → 向右 → 向上 → 向左。核心邊界條件對稱調整即可。
num <= ROW*COL 統一截斷。col-2-n 開始)。