【GESP】C++二级练习 luogu-B3844, [GESP样题 二级] 画正方形
GESP二级练习,多层循环嵌套和ASCII练习,难度★✮☆☆☆。
luogu-B3844 [GESP样题 二级] 画正方形
题目要求
题目描述
输入一个正整数 $n$,要求输出一个 $n$ 行 $n$ 列的正方形图案(参考样例输入输出)。图案由大写字母组成。
其中,第 $1$ 行以大写字母 $\texttt A$ 开头,第 $2$ 行以大写字母 $\texttt B$ 开头,以此类推;在每行中,第 $2$ 列为第 $1$ 列的下一个字母,第 $3$ 列为第 $2$ 列的下一个字母,以此类推;特别的,规定大写字母 $\texttt Z$ 的下一个字母为大写字母 $\texttt A$。
输入格式
输入一行,包含一个正整数 $n$。约定 $2 \le n \le 40$。
输出格式
输出符合要求的正方形图案。
样例输入 #1
1
3
样例输出 #1
1
2
3
ABC
BCD
CDE
样例输入 #2
1
5
样例输出 #2
1
2
3
4
5
ABCDE
BCDEF
CDEFG
DEFGH
EFGHI
题目分析
- 读取输入的正整数n,表示正方形图案的行数和列数。
- 使用两层循环来输出正方形图案。外层循环控制行数,内层循环控制列数。
- 在内层循环中,使用ASCII码来输出对应的大写字母。从’A’开始,每次输出后,字母向后移动一个。
- 注意处理字母’Z’的特殊情况。当字母到达’Z’时,下一个字母应该是’A’,因此需要特殊处理。
- 每行输出完成后,换行以开始下一行的输出。
- 重复步骤2-5,直到输出了n行。
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
int main() {
int n; // 读取输入的最大值
cin >> n;
int start_char = 'A'; // 初始化起始字符为'A'
int end_char = 'A' + 25; // 计算结束字符为'A' + 25
for (int i = 1; i <= n; i++) { // 外层循环控制行数
for (int j = 0; j < n; j++) { // 内层循环控制列数
int current_ascii = start_char + j % 26; // 计算当前字符的ASCII码
if (current_ascii > end_char) { // 如果当前字符的ASCII码超过结束字符的ASCII码
current_ascii -= 26; // 调整当前字符的ASCII码
}
cout << (char)current_ascii; // 输出当前字符
}
cout << endl; // 换行
start_char++; // 每行后,起始字符向后移动一个
if (start_char > end_char) { // 如果起始字符超过结束字符
start_char -= 26; // 调整起始字符
}
}
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权