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

如何实现从A到O的字母半菱形图案?C++代码调试求助

问题分析与解决方案

你的代码问题在于全局变量ch在所有行之间持续递减,导致每行输出的都是连续字母序列,但目标图案中每行的字母并非连续递减,且每行起始字母和内部字母的间隔有特定规律。

不需要额外添加循环,只需调整字母的计算逻辑:

修改后的代码

#include<iostream>

using namespace std;

int main() {
    int n;
    cin >> n;
    // 限制输入不超过5,避免字母超出A-Z范围
    if (n > 5) n = 5;

    for(int i = 0; i < n; i++) {
        // 计算当前行的起始字母
        char current = 'O' - i*(i+1)/2;
        for(int k = 0; k < n - i; k++) {
            cout << current;
            // 按规律计算下一个字母的间隔
            current -= (i + k + 2);
        }
        cout << "\n";
    }

    return 0;
}

逻辑说明

  1. 每行起始字母计算:第i行(从0开始计数)的起始字母是'O'减去1到i的累加和(公式为i*(i+1)/2),比如第1行起始为O,第2行起始为O-1=N,第3行起始为N-2=L,以此类推。
  2. 每行内部字母计算:每行内的后续字母,比前一个字母小(i + k + 2)(k是当前行内的字母索引),以此实现目标图案的间隔规律。

输入n=5时,运行结果与目标一致:

OMJFA
NKGB
LHC
ID
E

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:04:52