本题要求根据输入的正整数 (n)((2 \le n \le 40)),输出一个由大写字母组成的三角形图案。图案的特点如下:
A、B、C、……、Z,到达 Z 后重新从 A 开始,即循环使用 26 个大写字母。题目属于简单的模拟题,重点在于控制双层循环和字母的循环输出。
我们可以把整个输出过程理解为:按照“先从左到右、再从上到下”的顺序逐个输出字母,同时维护一个不断循环的字母索引。
具体步骤:
ch)记录已经输出的字母总数,初始值为 (0)。'A' + (ch % 26)。ch 增加 (1)。由于 ch % 26 的结果始终在 (0) 到 (25) 之间,因此 'A' + (ch % 26) 会在 'A' 到 'Z' 之间循环,完美符合题目要求。
以下是解决该问题的 C++ 代码(参考题目所给代码,并修正了细微错误):
cpp1#include <iostream> 2using namespace std; 3 4int main() { 5 int n; 6 cin >> n; 7 int ch = 0; // 记录已经输出的字母个数 8 for (int i = 1; i <= n; i++) { 9 for (int j = 1; j <= i; j++) { 10 cout << (char)('A' + (ch++) % 26); 11 } 12 cout << endl; 13 } 14 return 0; 15}
代码解释:
int ch = 0;:初始化计数器,代表下一个将要输出的字母在字母表中的偏移量(从 A 开始)。for (int i = 1; i <= n; i++):逐行处理,变量 i 既是行号,也是该行应输出的字符个数。for (int j = 1; j <= i; j++):输出当前行的 i 个字母。其中 'A' + (ch++) % 26 实现了字母的循环选取:
ch++ 先返回 ch 当前值,再将其加 1;% 26 得到 0~25 的余数,保证字母在 A~Z 范围内;(char) 强制转换为字符输出。cout << endl;:每行输出完毕后换行,且不会在行末产生多余空格。程序中只使用了几个整型变量,没有使用与输入规模相关的额外数组,故空间复杂度为 (O(1))。
本题考察循环嵌套和 ASCII 码的基本运用,以及对模运算实现循环输出的理解。只要理清行数与列数的关系,并用一个计数器实现字母循环,就能轻松解决。对于初学者而言,这是一道很好的基础练习。