26
代码:
include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
int arr[20][20] = {0};
int top = 0, bottom = n - 1; // 上下边界
int left = 0, right = n - 1; // 左右边界
int num = 1;
// 循环填充,直到num> n²
while (num <= n * n)
{
// 1:左 → 右
for (int i = left; i <= right; i++)
arr[top][i] = num++;
top++; // 上边界下移
// 2:上 → 下
for (int i = top; i <= bottom; i++)
arr[i][right] = num++;
right--; // 右边界左移
// 3:右 → 左(反向)
for (int i = right; i >= left; i--)
arr[bottom][i] = num++;
bottom--; // 下边界上移
// 4左侧列:下 → 上(反向)
for (int i = bottom; i >= top; i--)
arr[i][left] = num++;
left++; // 左边界右移
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
printf("%d ", arr[i][j]);
printf("\n");
}
return 0;
}
bug:
收获:填“顶部行”从左到右,最顶行行号:top ,列从left到right 填第 0 行,列 0→3 → 数字 1、2、3、4填完后,上边界下移top++最右列right,行从top到bottom右边界左移right-- 下一层的右边界不再包含这一列每填完一层top++ right-- bottom-- 、left++直到num超过>n×n
浙公网安备 33010602011771号