luogu-B4037 [GESP202409 二级] 小杨的 N 字矩阵

luogu-B4037 [GESP202409 二级] 小杨的 N 字矩阵

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

luogu-B4037 [GESP202409 二级] 小杨的 N 字矩阵

题目要求

题目描述

小杨想要构造一个 m×mm \times mNN 字矩阵(mm 为奇数),这个矩阵的从左上角到右下角的对角线、第 11 列和第 mm 列都是半角加号 + ,其余都是半角减号 - 。例如,一个 5×55 \times 5 的 N 字矩阵如下:

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

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

输入格式

输入只有一行包含一个正整数 mm

输出格式

输出对应的 NN 字矩阵。

输入 #1

5

输出 #1

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

说明/提示

数据规模与约定

对全部的测试数据,保证 3m493 \leq m \leq 49mm 是奇数。


题目分析

解题思路

  1. 读取输入的奇数 mm,表示矩阵的大小。
  2. 使用两个循环来打印矩阵。外层循环控制行数,内层循环控制列数。
  3. 在内层循环中,根据当前行和列的位置来决定输出什么字符。
    • 如果当前行或列是边界(即行或列号为1或mm),输出 +
    • 如果当前位置在从左上角到右下角的对角线上(即行号等于列号),输出 +
    • 否则,输出 -
  4. 在每行的最后,输出换行符以换到下一行。
  5. 重复步骤3和4,直到打印完整个矩阵。

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

—·

示例代码

#include <iostream>
using namespace std;
int main() {
    int n; // 读取输入的正整数
    cin >> n; // 从输入流中读取n的值
    for (int i = 1; i <= n; i++) { // 遍历从1到n的所有整数
        cout << "+"; // 输出矩阵的上边界
        for (int j = 1; j <= n - 2; j++) { // 遍历矩阵的中间部分
            if (i == 1 || i == n) { // 如果当前行是第一行或最后一行
                cout << "-"; // 输出边界
            } else {
                if (j == i - 1) { // 如果当前列是对角线
                    cout << "+"; // 输出对角线
                } else {
                    cout << "-"; // 输出非对角线部分
                }
            }
        }
        cout << "+" << endl; // 输出矩阵的下边界并换行
    }
    return 0; // 程序返回0,表示执行成功
}

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

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

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

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

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