[GESP样题 二级] 画正方形

[GESP样题 二级] 画正方形

GESP二级练习,多层循环嵌套和ASCII练习,难度★✮☆☆☆。

luogu-B3844 [GESP样题 二级] 画正方形

题目要求

题目描述

输入一个正整数 nn,要求输出一个 nnnn 列的正方形图案(参考样例输入输出)。图案由大写字母组成。

其中,第 11 行以大写字母 A\texttt A 开头,第 22 行以大写字母 B\texttt B 开头,以此类推;在每行中,第 22 列为第 11 列的下一个字母,第 33 列为第 22 列的下一个字母,以此类推;特别的,规定大写字母 Z\texttt Z 的下一个字母为大写字母 A\texttt A

输入格式

输入一行,包含一个正整数 nn。约定 2n402 \le n \le 40

输出格式

输出符合要求的正方形图案。

样例输入 #1

3

样例输出 #1

ABC
BCD
CDE

样例输入 #2

5

样例输出 #2

ABCDE
BCDEF
CDEFG
DEFGH
EFGHI

题目分析

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

{% include custom/custom-post-content-inner.html %}

示例代码

#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;
}

{% include custom/custom-post-content-footer.md %}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目可在 洛谷题库 在线评测。

bcqm-”系列题目可在 编程启蒙题库 在线评测。

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
Last updated on