You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言仅用循环实现自然数方形图案打印问题求助

问题分析与代码修正

原代码采用了仅适配n=3的硬编码逻辑,无法处理其他自然数输入。核心问题是未提炼出图案中每个位置的通用计算规则:对于图案内任意坐标(i,j),需打印的数值等于n减去该位置到图案四条边界的最小距离。

修正思路

  1. 支持用户输入任意自然数n,而非固定为3
  2. 对每个坐标(i,j),计算四个方向的边界距离:
    • 到顶部边界的距离:i(i从0开始,顶部为i=0)
    • 到底部边界的距离:(2*n-2) - i(底部为i=2n-2)
    • 到左侧边界的距离:j
    • 到右侧边界的距离:(2*n-2) - j
  3. 取上述四个距离的最小值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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:30:26