#include <stdio.h> int main() { int arr[20][20], n; scanf("%d", &n); int up = 0, left = 0, right = n - 1, down = n - 1; int x = 1; while (x <= n * n) { for (int i = left; i <= right; i++) { arr[up][i] = x++; } up++; for (int i = up; i <= down; i++) { arr[i][right] = x++; } right--; for(int i = right;i>=left;i--) { arr[down][i] = x++; } down--; for(int i = down;i>=up;i--) { arr[i][left] = x++; } left++; } for(int i = 0;i < n;i++) { for(int j = 0;j<n;j++) { printf("%d ",arr[i][j]); } printf("\n"); } return 0; }
按上-右-下-左一圈再一圈的顺序给二维数组赋值,每次处理完一条边后要改变边界值的大小。最后打印 我带值进去进行运算
主要考察的就是对于边界情况的判断,需要建立 n * n 的矩阵 arr 存储值,并且声明一个变量 k ,随着循环自增,每次循环的 k 值存储在
arr 内,最后再将 arr 数组按行打印即可。 while 循环的终止条件即为 k > n * n,并且要注意四个 for
循环中,必须有两个 for 循环(分别为左右循环和上下循环)的终止条件取等号,目的是确保能够到达循环终止前最后一个会使边界重叠的位置。