文章

【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

题目分析

  1. 读取输入的正整数n,表示正方形图案的行数和列数。
  2. 使用两层循环来输出正方形图案。外层循环控制行数,内层循环控制列数。
  3. 在内层循环中,使用ASCII码来输出对应的大写字母。从’A’开始,每次输出后,字母向后移动一个。
  4. 注意处理字母’Z’的特殊情况。当字母到达’Z’时,下一个字母应该是’A’,因此需要特殊处理。
  5. 每行输出完成后,换行以开始下一行的输出。
  6. 重复步骤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 进行授权