二级
C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【GESP】C++二级真题 luogu-B4037 [GESP202409 二级] 小杨的 N 字矩阵
📅 2025-02-12·✍️ OneCoder·计算中...·⏱️ 4 分钟
#GESP#C++#多重循环
GESP二级真题,多层循环和分支练习,难度★✮☆☆☆。
luogu-B4037 [GESP202409 二级] 小杨的 N 字矩阵
题目要求
题目描述
小杨想要构造一个 的 字矩阵( 为奇数),这个矩阵的从左上角到右下角的对角线、第 列和第 列都是半角加号
+,其余都是半角减号-。例如,一个 的 N 字矩阵如下:PLAIN 5 行+---+ ++--+ +-+-+ +--++ +---+请你帮小杨根据给定的 打印出对应的 N 字矩阵。
输入格式
输入只有一行包含一个正整数 。
输出格式
输出对应的 字矩阵。
输入 #1
CONSOLE
1 行
5
输出 #1
CONSOLE
5 行
+---+
++--+
+-+-+
+--++
+---+
说明/提示
数据规模与约定
对全部的测试数据,保证 且 是奇数。
题目分析
解题思路
- 读取输入的奇数 ,表示矩阵的大小。
- 使用两个循环来打印矩阵。外层循环控制行数,内层循环控制列数。
- 在内层循环中,根据当前行和列的位置来决定输出什么字符。
- 如果当前行或列是边界(即行或列号为1或),输出
+。 - 如果当前位置在从左上角到右下角的对角线上(即行号等于列号),输出
+。 - 否则,输出
-。
- 如果当前行或列是边界(即行或列号为1或),输出
- 在每行的最后,输出换行符以换到下一行。
- 重复步骤3和4,直到打印完整个矩阵。
---·
示例代码
C++
22 行
#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,表示执行成功
}
💡 OneCoder 资源指引
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
🤝 技术交流与答疑
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
📚
猜你想读 · 相关文章推荐
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com
读者讨论与留言
💬 还没有读者留言,快来成为第一个讨论者吧!