1 条题解
-
0
画三角形 完整题解(C++)
针对GESP二级的“画三角形”问题,我为你提供可直接提交、逻辑清晰的代码,同时用简单易懂的方式解释核心思路,适合小学生理解和考试使用。
最终可提交代码
#include <iostream> using namespace std; int main() { int n; cin >> n; int current_char = 0; // 记录当前要输出的字母(0对应A,1对应B...25对应Z) // 外层循环:控制行数(从1到n行) for (int i = 1; i <= n; i++) { // 内层循环:控制每行输出的字母数量(第i行输出i个字母) for (int j = 1; j <= i; j++) { // 计算当前字母:current_char % 26 实现Z后回到A,+65转换为ASCII码(A的ASCII是65) char c = 'A' + (current_char % 26); cout << c; current_char++; // 切换到下一个字母 } cout << endl; // 每行结束换行 } return 0; }解题思路(小学生能懂)
-
核心需求拆解:
- 输入n,输出n行;第1行1个字母,第2行2个字母……第n行n个字母;
- 字母从A开始依次填充,Z之后回到A循环;
- 每行右侧无多余空格(直接输出字母,不补空格)。
-
关键知识点:
- 字母循环:A-Z共26个字母,用
current_char % 26实现循环(比如25对应Z,26%26=0对应A,27%26=1对应B); - ASCII码转换:大写字母A的ASCII码是65,B是66……Z是90,所以
'A' + 数字可以得到对应字母(比如'A'+0=A,'A'+25=Z); - 双层循环:外层循环控制行数,内层循环控制每行输出的字母数。
- 字母循环:A-Z共26个字母,用
-
样例验证(输入3):
- 第1行(i=1):j=1 → current_char=0 → 'A'+0=A → 输出A,current_char变为1;
- 第2行(i=2):j=1 → current_char=1 → B,j=2 → current_char=2 → C → 输出BC,current_char变为3;
- 第3行(i=3):j=1→D,j=2→E,j=3→F → 输出DEF;
- 最终输出和样例1完全一致。
-
循环验证(输入7): 第7行需要输出7个字母,前6行总共输出
1+2+3+4+5+6=21个字母,第7行从第22个字母开始:- 21 → 'A'+21=V,22→W,23→X,24→Y,25→Z,26→A(26%26=0),27→B(27%26=1);
- 所以第7行输出
VWXYZAB,和样例2一致。
代码运行验证
输入 输出(关键行) 3 A
BC
DEF7 A
BC
DEF
GHIJ
KLMNO
PQRSTU
VWXYZAB总结
- 核心逻辑:
- 用
current_char累计字母序号,%26实现A-Z循环,'A' + 序号转换为字母; - 外层循环控行数(1~n),内层循环控每行字母数(1~当前行数)。
- 用
- 考试注意点:
- 无需输出多余空格,直接连续输出字母即可;
- 注意数据范围(n≤40),代码中
current_char用int类型足够,不会溢出; - 严格按样例格式换行,每行结束必须输出
endl。
-
- 1
信息
- ID
- 674
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 5
- 已通过
- 3
- 上传者