B3837 [GESP202303 二级] 画三角形
题目描述
输入一个正整数 n,请使用大写字母拼成一个这样的三角形图案(参考样例输入输出):三角形图案的第 1 行有 1 个字母,第 2 行有 2 个字母,以此类推;在三角形图案中,由上至下、由左至右依次由大写字母 A−Z 填充,每次使用大写字母 Z 填充后,将从头使用大写字母 A 填充。
输入格式
输入一行,包含一个正整数 n。约定 2≤n≤40。
输出格式
输出符合要求的三角形图案。注意每行三角形图案的右侧不要有多余的空格。
输入输出样例
此类题套路代码截图,很简单的嵌套循环:
解题思路
根据上图分析,n=4,按照数数对齐找规律分析:
- 第1行,1个字母 A
- 第2行,2个字母 接着上一行输出 BC
- 第3行,3个字母 接着上一行输出 DEF
- 第4行,4个字母 接着上一行输出 GHIJ
仔细观察得到规律:
第 i 行, i个字母,字母从A开始一次递增输出,就像图中所示“一根绳上的蚂蚱”一样,需要注意字母到Z输出后,要回归到A再输出。
这一题同上一篇的“画正方形”类似,对于这种图形输出,双重循环分别控制行列输出。不同的是上一题是n行n列,而这一题是n行,但是每一行不是固定的n列,遇到这种情况,通常就要找出列数与行号i的关系。根据输出图形,我们可以发现每行的列数跟当前的行号一致,也即j<=i;
上一题的“画正方形”每行的字母是以本行的行首字母作为基准,而此题中所有的字母都是以字母'A‘为基准,依次递增。所以该题的关键是用变量 current 记录当前字母的偏移量(从 A 开始)。 每行输出 i 个字母(i 为行号),循环处理 Z 到 A 的转换。
代码一
#include <iostream>
using namespace std;
int main(){int n,current=0;cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){cout<<char('A'+current%26);current++;}cout<<endl;}return 0;
}
代码二
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){int n;cin >> n;char ch='A';for(int i=1;i<= n; i++){// 第i行i个字符for(int j=1; j<=i; j++){cout<< ch;ch++;if(ch >'Z')ch ='A';}cout << endl;}return 0;
}