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

如何用C语言for循环打印指定数字图案?原代码仅适配输入4

问题

我尝试了如下C语言代码,但该代码仅能在输入为4时正确打印目标数字图案,输入5、2等其他数值时均无法正常运行。请问如何修改该程序,使其匹配输入2、5、7时的预期输出?

预期输出示例

  • 输入:2
2 2 2
2 1 2 
2 2 2
  • 输入:5
5 5 5 5 5 5 5 5 5 
5 4 4 4 4 4 4 4 5 
5 4 3 3 3 3 3 4 5 
5 4 3 2 2 2 3 4 5 
5 4 3 2 1 2 3 4 5 
5 4 3 2 2 2 3 4 5 
5 4 3 3 3 3 3 4 5 
5 4 4 4 4 4 4 4 5 
5 5 5 5 5 5 5 5 5
  • 输入:7
7 7 7 7 7 7 7 7 7 7 7 7 7 
7 6 6 6 6 6 6 6 6 6 6 6 7 
7 6 5 5 5 5 5 5 5 5 5 6 7 
7 6 5 4 4 4 4 4 4 4 5 6 7 
7 6 5 4 3 3 3 3 3 4 5 6 7 
7 6 5 4 3 2 2 2 3 4 5 6 7 
7 6 5 4 3 2 1 2 3 4 5 6 7 
7 6 5 4 3 2 2 2 3 4 5 6 7 
7 6 5 4 3 3 3 3 3 4 5 6 7 
7 6 5 4 4 4 4 4 4 4 5 6 7 
7 6 5 5 5 5 5 5 5 5 5 6 7 
7 6 6 6 6 6 6 6 6 6 6 6 7 
7 7 7 7 7 7 7 7 7 7 7 7 7 

现有代码

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
    int n;
    scanf("%d", &n);
    // Complete the code to print the pattern.
    int limit = (n * 2) - 1;
    int row, column;

    for (row = 1; row <= limit; row++) {
        for (column = 1; column <= limit; column++) {
            if (column == 1 || column == 7 || row == 1 || row == 7)
                printf("%d ", n);
            else if (column == 2 || column == 6 || row == 2 || row == 6)
                printf("%d ", n - 1);
            else if (column == 3 || column == 5 || row == 3 || row == 5)
                printf("%d ", n - 2);
            else if (column == 4 || column == 4 || row == 4 || row == 4)
                printf("%d ", n - 3);
        }
        printf("\n");
    }
    return 0;
}
解决方案

问题分析

现有代码的核心问题是硬编码了固定的列数、行数判断条件(比如column ==7、row==6等),这些数值仅对应输入n=4时的边界(limit=7),换其他输入时逻辑完全失效。

要实现通用的图案生成,需找到每个位置(row, column)的数值规律:每个位置的数值等于n减去该位置到图案四个边界的最小距离。

修改后的代码

#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);
    int limit = 2 * n - 1;
    int row, column;

    for (row = 1; row <= limit; row++) {
        for (column = 1; column <= limit; column++) {
            // 计算当前位置到四个边界的距离
            int top = row;
            int bottom = limit - row + 1;
            int left = column;
            int right = limit - column + 1;
            
            // 取四个距离中的最小值
            int min_dist = top;
            if (bottom < min_dist) min_dist = bottom;
            if (left < min_dist) min_dist = left;
            if (right < min_dist) min_dist = right;
            
            // 输出对应数值
            printf("%d ", n - min_dist + 1);
        }
        printf("\n");
    }
    return 0;
}

逻辑说明

以输入n=2为例,limit=3:

  • 角落位置(如(1,1)):四个距离均为1,min_dist=1,数值为2-1+1=2,符合预期;
  • 中心位置(2,2):四个距离均为2,min_dist=2,数值为2-2+1=1,符合预期。

输入n=5时,中心位置(5,5)的四个距离均为5,数值为5-5+1=1,完全匹配预期图案。

内容的提问来源于stack exchange,提问作者No_name_instant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:48:27