文章

【GESP】C++二级真题 luogu-b3865, [GESP202309 二级] 小杨的 X 字矩阵

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

luogu-B3865 [GESP202309 二级] 小杨的 X 字矩阵

题目要求

题目描述

小杨想要构造一个 的 X 字矩阵( 为奇数),这个矩阵的两条对角线都是半角加号 + ,其余都是半角减号 - 。例如,一个 $5 \times 5$ 的 X 字矩阵如下:

+---+
-+-+-
--+--
-+-+-
+---+

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

输入格式

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

输出格式

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

请严格按格式要求输出,不要擅自添加任何空格、标点、空行等任何符号。你应该恰好输出 $N$ 行,每行除了换行符外恰好包含 $N$ 个字符,这些字符要么是 +,要么是 -

样例输入 #1

1
5

样例输出 #1

1
2
3
4
5
+---+
-+-+-
--+--
-+-+-
+---+

样例输入 #2

1
7

样例输出 #2

1
2
3
4
5
6
7
+-----+
-+---+-
--+-+--
---+---
--+-+--
-+---+-
+-----+

题目分析

解题思路

  1. 首先,读取输入的整数 N,用于生成“X 字矩阵”。
  2. 初始化一个循环来生成“X 字矩阵”,从1到 N
  3. 对于每一行中的每一列,使用条件语句来决定输出 +-。如果当前行和列的索引相等,或者当前行的索引加上列的索引等于 N+1,则输出 +,否则输出 -
  4. 在每行输出完成后,输出换行符以换行。
  5. 循环完成后,输出的“X 字矩阵”将被完整生成。


示例代码

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 result = n; // 初始化result为n
    for (int i = 1; i <= n; i++) { // 遍历从1到n的所有数
        for (int j = n; j >= 1; j--) { // 遍历从n到1的所有数
            if (j == i || j == n - i + 1) { // 如果j等于i或j等于n-i+1
                cout << "+"; // 输出"+"
            } else {
                cout << "-"; // 否则输出"-"
            }
        }
        cout << endl; // 换行
    }
}

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

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

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

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

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