参考答案:
#include <cstdio> #include <cstring> #include<stdlib.h> int main() { int n; int a[101][101]; int sum; //计数 int i, j; scanf_s("%d", &n); sum = 0; int x = 0, y = n - 1; // 代表 行列 memset(a, 0, sizeof(a)); //将数组清零 a[x][y] = ++sum; //填入第一个数 :1 while (sum < n * n) { while (x + 1 < n && !a[x + 1][y]) // !a[x + 1][y] 代表这个区域未有数填入,区域依然为0 { a[++x][y] = ++sum; } while (y - 1 >= 0 && !a[x][y - 1]) { a[x][--y] = ++sum; } while (x - 1 >= 0 && !a[x - 1][y]) { a[--x][y] = ++sum; } while (y + 1 < n && !a[x][y + 1]) { a[x][++y] = ++sum; } } for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { printf("%5d", a[i][j]); } printf("\n"); } //system("pause"); return 0; }