代码
//回型矩阵 #include<stdio.h> int main() { int arr[20][20], n; printf("请输入n的值:\n"); scanf_s("%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\t", arr[i][j]); } printf("\n"); } return 0; }
分析
其思想就是按照上–右—下—左----的顺序一圈再一圈的顺序给二维数组赋值,每次处理完一条边后要改变边界值得大小,最后打印。
主要考察的就是对于边界情况的判断,需要建立 n * n 的矩阵 arr 存储值,并且声明一个变量 k ,随着循环自增,每次循环的 k 值存储在 arr 内,最后再将 arr 数组按行打印即可。 while 循环的终止条件即为 k > n * n,并且要注意四个 for 循环中,必须有两个 for 循环(分别为左右循环和上下循环)的终止条件取等号,目的是确保能够到达循环终止前最后一个会使边界重叠的位置。