如何实现从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; }
逻辑说明
- 每行起始字母计算:第
i行(从0开始计数)的起始字母是'O'减去1到i的累加和(公式为i*(i+1)/2),比如第1行起始为O,第2行起始为O-1=N,第3行起始为N-2=L,以此类推。 - 每行内部字母计算:每行内的后续字母,比前一个字母小
(i + k + 2)(k是当前行内的字母索引),以此实现目标图案的间隔规律。
输入n=5时,运行结果与目标一致:
OMJFA
NKGB
LHC
ID
E
内容的提问来源于stack exchange,提问作者Darshan B
相关产品推荐
相关产品推荐

