【GESP真题解析】第 17 集 GESP 二级 2024 年 9 月编程题 2:小杨的 N 字矩阵
发布时间
阅读量:
阅读量

很高兴见到您!我叫Mösh tread...(等等)
这次为大家带来深度解析的小杨同学带来的N型矩阵问题。
题目链接
洛谷链接:B4037 小杨的 N 字矩阵

一、完成输入
按照输入格式的要求,在一行变量m中定义其数据范围为 3\le m \le 49 ,其中m属于int类型,并采用int类型。
int m;
cin>>m;
cpp
输入完成后,我们开始分析题意。
二、分析题意
按照题目所述的小杨打算构造一个 m\times m 的 N 字矩阵,在该矩阵中:主对角线以及第一列和第 m 列由半角加号 + 组成;其余位置则由半角减号 - 填充。
使用两重循环,即可实现 m \times m 的矩阵,先输出减号。
for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++)
{
cout<<'-';
}
cout<<endl;
}
cpp
这样就可以全部输出减号。

按照题目所述,在矩阵中主对角线上的元素均为加号;其行列索引值相一致。

所以做特殊判断即可。
for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++)
{
if(i==j)
{
cout<<'+';
}
else
{
cout<<'-';
}
}
cout<<endl;
}
cpp


第 1 列和第 m 列也是输出加号,所以附加一个条件。
if(i==j||j==1||j==m)
{
cout<<'+';
}
else
{
cout<<'-';
}
cpp
输入样例输入的数据,进行验证。

没有问题,到网站提交评测。
三、验证数据
提交到网站中,通过!

四、完整代码
完整代码如下:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int m;
cin>>m;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++)
{
if(i==j||j==1||j==m)
{
cout<<'+';
}
else
{
cout<<'-';
}
}
cout<<endl;
}
}
cpp

五、技巧总结
这道题在模拟构造类问题中具有代表性,在学习过程中是一个典型的二维图形问题。通过根据特定位置进行判断后输出相应的字符,在二维图形问题中属于基础练习类型。
题目的关键在于找到判断规律:
使用两层 for 循环分别遍历行和列,通过 if 判断位置关系输出对应字符。
if (i == j || j == 1 || j == m)
{
cout << '+';
}
else
{
cout << '-';
}
cpp
(1)i == j 是主对角线(左上角到右下角);
(2)j == 1 是第一列;
(3)j == m 是最后一列。
如果对你有帮助,感谢点赞关注收藏哦~
全部评论 (0)
还没有任何评论哟~
