C语言仅用循环实现自然数方形图案打印问题求助
问题分析与代码修正
原代码采用了仅适配n=3的硬编码逻辑,无法处理其他自然数输入。核心问题是未提炼出图案中每个位置的通用计算规则:对于图案内任意坐标(i,j),需打印的数值等于n减去该位置到图案四条边界的最小距离。
修正思路
- 支持用户输入任意自然数
n,而非固定为3 - 对每个坐标
(i,j),计算四个方向的边界距离:- 到顶部边界的距离:
i(i从0开始,顶部为i=0) - 到底部边界的距离:
(2*n-2) - i(底部为i=2n-2) - 到左侧边界的距离:
j - 到右侧边界的距离:
(2*n-2) - j
- 到顶部边界的距离:
- 取上述四个距离的最小值
min_dist,最终打印n - min_dist
修正后的代码
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int n; printf("请输入自然数n: "); scanf("%d", &n); int size = 2 * n - 1; // 图案的边长 for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { // 计算四个方向到边界的距离 int dist_top = i; int dist_bottom = size - 1 - i; int dist_left = j; int dist_right = size - 1 - j; // 找出最小距离 int min_dist = dist_top; if (dist_bottom < min_dist) min_dist = dist_bottom; if (dist_left < min_dist) min_dist = dist_left; if (dist_right < min_dist) min_dist = dist_right; printf("%d", n - min_dist); } printf("\n"); } return 0; }
测试示例
输入n=4时,输出:
4444444 4333334 4322234 4321234 4322234 4333334 4444444
输入n=5时,输出:
555555555 544444445 543333345 543222345 543212345 543222345 543333345 544444445 555555555
内容的提问来源于stack exchange,提问作者Wael Jaber
相关产品推荐
相关产品推荐

