文章

【GESP】C++二级真题 luogu-B3837, [GESP202303 二级] 画三角形

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

luogu-B3837 [GESP202303 二级] 画三角形

题目要求

题目描述

输入一个正整数 $n$,请使用大写字母拼成一个这样的三角形图案(参考样例输入输出):三角形图案的第 $1$ 行有 $1$ 个字母,第 $2$ 行有 $2$ 个字母,以此类推;在三角形图案中,由上至下、由左至右依次由大写字母 $\texttt{A}-\texttt{Z}$ 填充,每次使用大写字母 $\texttt Z$ 填充后,将从头使用大写字母 $\texttt A$ 填充。

输入格式

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

输出格式

输出符合要求的三角形图案。注意每行三角形图案的右侧不要有多余的空格。

样例输入 #1

1
3

样例输出 #1

1
2
3
A
BC
DEF

样例输入 #2

1
7

样例输出 #2

1
2
3
4
5
6
7
A
BC
DEF
GHIJ
KLMNO
PQRSTU
VWXYZAB

题目分析

  1. 读取输入的正整数n,表示三角形图案的行数。
  2. 使用两层循环来输出三角形图案。外层循环控制行数,内层循环控制列数。
  3. 在内层循环中,使用ASCII码来输出对应的大写字母。从’A’开始,每次输出后,字母向后移动一个。例如,如果当前输出的是’A’,下一个输出将是’B’,以此类推。
  4. 当输出到达’Z’时,下一个字母应该是’A’,因此需要特殊处理。可以通过模运算(%)来实现循环输出,例如,当前输出的是’Z’,下一个输出将是’A’,以此类推。
  5. 每行输出完成后,换行以开始下一行的输出。换行符(\n)用于在每行输出完成后,移动到下一行继续输出。
  6. 重复步骤2-5,直到输出了n行。外层循环控制行数,内层循环控制列数,通过这种方式,可以输出一个完整的三角形图案。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main() {
    int n; // 读取输入的正整数n
    cin >> n; // 从输入流中读取n的值
    int start_char = 'A'; // 初始化起始字符为'A'
    int idx = 0; // 初始化索引为0
    for (int i = 1; i <= n; i++) { // 外层循环控制行数
        for (int j = 1; j <= i; j++) { // 内层循环控制列数
            int current_ascii = start_char + idx % 26; // 计算当前字符的ASCII码
            cout << (char)current_ascii; // 输出当前字符
            idx++; // 索引自增
        }
        cout << endl; // 换行以开始下一行的输出
    }
    return 0;
}

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

GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页

luogu-”系列题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

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

本文由作者按照 CC BY 4.0 进行授权