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

如何按规则打印数字金字塔,解决现有代码仅兼容N<10的问题

问题根因

原有代码只适配了N<10的场景,存在两个缺陷:

  • 前置空格计算逻辑错误:默认每个数字占1个字符,直接用n-i个单空格做缩进,当数字≥10时占2个字符,原缩进量不足以支撑居中对齐。
  • 没有考虑多位数的字符长度差异,导致各行总长度不对称,破坏金字塔结构。
修复代码

我们可以先计算每行数字部分的总字符长度,再根据最后一行的总长度动态计算前置空格数,适配任意大小的N:

#include <iostream>
#include <string>
using namespace std;

int main() {
    int n;
    cin >> n;
    // 预计算最后一行的总字符数,作为居中对齐的基准
    int max_len = 0;
    for (int k = n; k >= 0; --k) max_len += to_string(k).size();
    for (int k = 1; k <= n; ++k) max_len += to_string(k).size();

    for (int i = 0; i <= n; ++i) {
        // 计算当前行数字部分的总长度
        int cur_len = 0;
        for (int k = i; k >= 0; --k) cur_len += to_string(k).size();
        for (int k = 1; k <= i; ++k) cur_len += to_string(k).size();
        // 补前置空格实现居中
        for (int j = 0; j < (max_len - cur_len) / 2; ++j) {
            cout << ' ';
        }
        // 原有数字打印逻辑不变
        int dir = -1;
        for (int k = i; k <= i; k += dir) {
            cout << k;
            if (k == 0) dir = 1;
        }
        cout << endl;
    }
    return 0;
}
验证效果

当N=10时,输出会自动调整空格数,所有行居中对称,符合数字金字塔的格式要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:06:04