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

C语言用for/while/do-while循环实现指定金字塔数字图案问题

问题原因

你的代码排版错乱的核心原因是默认所有输出数字都只占1个字符宽度:当n≤9时所有数字都是1位,排版自然正常;但n≥10之后,10及以上的数字是两位数,单个数占2个字符宽度,而你前面打印的前置空格还是按每个数字占1位的逻辑计算输出,自然就会出现错位。

修复方案

统一所有数字的输出宽度,同时对应调整前置空格的占位宽度即可,这里我们统一设置为占2位输出,修改后代码如下:

#include <stdio.h>
int main(void)
{
  // 可自行修改n的值测试效果
  int n = 10, i, j, num = 1, gap;

  gap = n - 1;

  for ( j = 1 ; j <= n ; j++ )
  {
      num = j;
      // 每个前置位置输出2个空格,和后面数字的2位宽度对应
      for ( i = 1 ; i <= gap ; i++ )
          printf("  ");

      gap --;

      for ( i = 1 ; i <= j ; i++ )
      {
          // 固定2位宽度输出数字
          printf("%2d", num);
          num++;
      }
      num--;
      num--;
      for ( i = 1 ; i < j ; i++)
      {
          printf("%2d", num);
          num--;
      }
      printf("\n");

  }

  return 0;
}

补充说明

如果后续需要支持n≥100的场景,只需要对应把输出宽度调整为3位(格式符改为%3d),前置空格也对应改为每次输出3个空格即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:06:03