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

如何用for循环在C++字母K图案中逐行减少空格?

解决C++中字母K图案上半部分空格逐行递减的问题

你的核心问题是上半部分的空格数没有和当前行数绑定,用了固定值导致每行空格一致。要实现逐行减1的效果,只需要让空格数随循环的行号动态计算即可。

问题版代码(你的现有逻辑)

#include <iostream>
using namespace std;

int main() {
    int size;
    cin >> size;
    // 上半部分:空格数固定,导致每行开头空格无变化
    for (int i = 0; i < size; i++) {
        // 这里的size-1是固定值,就是问题根源
        for (int j = 0; j < size - 1; j++) {
            cout << " ";
        }
        cout << "*";
        if (i > 0) {
            for (int j = 0; j < i; j++) {
                cout << " ";
            }
            cout << "*";
        }
        cout << endl;
    }
    return 0;
}

修改后的完整代码

#include <iostream>
using namespace std;

int main() {
    int size;
    cin >> size;

    // 上半部分:共size行,空格逐行递减1
    for (int i = 0; i < size; i++) {
        // 动态计算每行开头空格数:第i行(从0开始)的空格数为 size-1 - i
        for (int j = 0; j < size - 1 - i; j++) {
            cout << " ";
        }
        cout << "*";
        // 从第二行开始,输出中间空格和右侧的*
        if (i > 0) {
            // 中间空格数:每行比上一行多2个,对应公式2*i -1
            for (int j = 0; j < 2 * i - 1; j++) {
                cout << " ";
            }
            cout << "*";
        }
        cout << endl;
    }

    // 下半部分:对称逆序,复用上半部分的空格逻辑
    for (int i = size - 2; i >= 0; i--) {
        for (int j = 0; j < size - 1 - i; j++) {
            cout << " ";
        }
        cout << "*";
        if (i > 0) {
            for (int j = 0; j < 2 * i - 1; j++) {
                cout << " ";
            }
            cout << "*";
        }
        cout << endl;
    }

    return 0;
}

关键修改说明

  • 开头空格动态计算:把固定的size-1改成size-1 - i,i是当前行的索引(从0开始)。这样第1行有size-1个空格,第2行减少1个,直到最后一行空格数为0,完全匹配需求。
  • 中间空格适配K形:两个*之间的空格用2*i -1计算,保证每行中间空格比上一行多2个,符合字母K的斜向结构。
  • 下半部分对称实现:通过从size-2逆序循环到0,复用和上半部分相同的空格逻辑,快速完成完整K图案的绘制。

示例输入输出

输入:4
输出:
*

  • *
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:33:12