用C语言,蛇形方阵。给出一个不大于 9 9 的正整数 � n,输出 � × � n×n 的蛇形方阵。 从左上角填上 1 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 3 个字符,前面使用空格补齐。
时间: 2024-01-09 07:21:29 浏览: 36
好的,我来为你解答这个问题。以下是代码实现:
```c
#include <stdio.h>
#define MAXN 100
int main()
{
int n, a[MAXN][MAXN];
scanf("%d", &n);
// 初始化数组
int num = 1;
int row = 0, col = 0;
a[row][col] = num++;
while (num <= n * n)
{
// 向右走
while (col + 1 < n && !a[row][col + 1])
a[row][++col] = num++;
// 向下走
while (row + 1 < n && !a[row + 1][col])
a[++row][col] = num++;
// 向左走
while (col - 1 >= 0 && !a[row][col - 1])
a[row][--col] = num++;
// 向上走
while (row - 1 >= 0 && !a[row - 1][col])
a[--row][col] = num++;
}
// 输出蛇形方阵
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
printf("%3d", a[i][j]);
printf("\n");
}
return 0;
}
```
这里使用了一个二维数组 `a` 来存储蛇形方阵,数组中的值为填充的数字。初始化时,将第一个数字 1 填充在左上角,然后按照顺时针方向不断填充数字,直到填满整个数组。
在填充数字时,我们使用了四个 while 循环,分别表示向右、向下、向左、向上走,每次一直走到不能前进为止。在判断能否前进时,需要注意数组下标的边界问题,以及当前位置是否已经填充了数字的问题。
最后,输出蛇形方阵时,每个数字都占用 3 个字符宽度,使用 `%3d` 的格式化输出即可。