#include <iostream> int main() { int A[100][100] = {0}; int n; std::cin >> n; int i=0,j=n-1,k=1; bool a=0;//这里通过a区分不同情况 while (i!=n-1||j!=0) { if(j>=i) { A[i][j--] = k++; while (j != n - 1) A[i++][j++] = k++; if (i != n - 1)//这里分情况判断,如果i=n-1说明已经到二维数组的对角线的最后一个位置 { A[i++][j] = k++; while (i != 0) A[i--][j--] = k++; if(i==0&j==0) a=1; } else a=0; } if (j <= i && a) { A[i++][j] = k++; while (i != n - 1) A[i++][j++] = k++; if(j!=0) A[i][j--] = k++; while (j != 0) A[i--][j--] = k++; } if (j <= i && !a) { A[i][j--]=k++; while (j != 0) A[i--][j--] = k++; if(i!=n-1) A[i++][j] = k++; while (i != n - 1) A[i++][j++] = k++; } if(i==n-1&&j==0) A[i][j]=k; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) printf("%3d", A[i][j]); printf("\n"); } return 0; }
输入7
28 16 15 7 6 2 1
29 27 17 14 8 5 3
39 30 26 18 13 9 4
40 38 31 25 19 12 10
46 41 37 32 24 20 11
47 45 42 36 33 23 21
49 48 44 43 35 34 22