文章

【GESP】C++二级真题 luogu-b3924, [GESP202312 二级] 小杨的H字矩阵

GESP二级真题,多层循环、分支语句练习,难度★✮☆☆☆。

luogu-B3924 [GESP202312 二级] 小杨的H字矩阵

题目要求

题目描述

小杨想要构造一个 $N \times N$ 的 H 字矩阵($N$ 为奇数),具体来说,这个矩阵共有 $N$ 行,每行 $N$ 个字符,其中最左列、最右列都是 | ,而中间一行(即第$\frac{N+1}{2}$行)的第 $2 \sim N-1$ 个字符都是 - ,其余所有字符都是半角小写字母 a。例如,一个 $N=5$ 的 H 字矩阵如下:

1
2
3
4
5
|aaa|
|aaa|
|---|
|aaa|
|aaa|

请你帮小杨根据给定的 $N$ 打印出对应的“H 字矩阵”。

输入格式

一行一个整数 $N$($5\le N \le 49$ ,保证 $N$ 为奇数)。

输出格式

输出对应的“H 字矩阵”。

请严格按格式要求输出,不要擅自添加任何空格、标点、空行等任何符号。你应该恰好输出 $N$ 行,每行除了换行符外恰好包含 $N$ 个字符,这些字符要么是 - ,要么是,要么是 a 。你的输出必须和标准答案完全一致才能得分,请在提交前仔细检查。

样例输入 #1

1
5

样例输出 #1

1
2
3
4
5
|aaa|
|aaa|
|---|
|aaa|
|aaa|

样例输入 #2

1
7

样例输出 #2

1
2
3
4
5
6
7
|aaaaa|
|aaaaa|
|aaaaa|
|-----|
|aaaaa|
|aaaaa|
|aaaaa|

题目分析

解题思路

  1. 首先,读取输入的整数 N,并确保它在指定的范围内($5\le N \le 49$)且为奇数。
  2. 初始化一个循环变量 i,用于控制输出的行数。
  3. 使用一个循环来输出“H 字矩阵”,从 1N
  4. 在每次循环中,首先输出一个竖线 |,然后根据行数 i 的位置输出相应的字符:
    • 如果 i 等于 (N + 1) / 2,输出 -,形成矩阵的中间横线。
    • 否则,输出 a,形成矩阵的上下边界和内部。
  5. 每行输出完成后,输出一个竖线 |,并换行。
  6. 循环结束后,输出完成。


示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std; // 使用标准命名空间
int main() {
    int n; // 定义整数变量n
    cin >> n; // 从输入流读取整数到n
    for (int i = 1; i <= n; i++) { // 循环从1到n
        cout << "|"; // 输出竖线
        for (int j = 1; j <= n - 2; j++) { // 循环从1到n-2
            if (i == (n + 1) / 2) { // 如果当前行数i等于n的中间行
                cout << "-"; // 输出横线
            } else {
                cout << "a"; // 否则输出字符'a'
            }
        }
        cout << "|"; // 输出竖线
        cout << endl; // 换行
    }

    return 0; // 返回0,表示程序执行成功
}

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

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

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

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

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