gesp(二级)(12)洛谷:B3955:[GESP202403 二级] 小杨的日字矩阵
题目描述
小杨想要构造一个 N × N N\times N N×N 的日字矩阵( N N N 为奇数),具体来说,这个矩阵共有 N N N 行,每行 N N N 个字符,其中最左列、最右列都是 |
,而第一行、最后一行、以及中间一行(即第 N + 1 2 \frac{N+1}{2} 2N+1 行)的第 2 ∼ N − 1 2\sim N-1 2∼N−1 个字符都是 -
,其余所有字符都是半角小写字母 x
。例如,一个 N = 5 N = 5 N=5 日字矩阵如下:
|---|
|xxx|
|---|
|xxx|
|---|
请你帮小杨根据给定的 N N N 打印出对应的"日字矩阵"。
输入格式
一行一个整数 N N N( 5 ≤ N ≤ 49 5\leq N \leq 49 5≤N≤49,保证 N N N 为奇数)。
输出格式
输出对应的"日字矩阵"。
请严格按格式要求输出,不要擅自添加任何空格、标点、空格等任何符号。你一个恰好输出 N N N 行,每行除了换行符外恰好包含 N N N 个字符,这些字符要么是 -
,要么是 |
,要么是 x
。你的输出必须和标准答案完全一致才能得分,请在提交前仔细检查。
样例 #1
样例输入 #1
5
样例输出 #1
|---|
|xxx|
|---|
|xxx|
|---|
样例 #2
样例输入 #2
7
样例输出 #2
|-----|
|xxxxx|
|xxxxx|
|-----|
|xxxxx|
|xxxxx|
|-----|
AC代码(100分)
cpp
#include<bits/stdc++.h>
using namespace std;
//按题意模拟
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){//外层循环控制行
if(i==1 || i==(n+1)/2 || i==n){//第一行、中间行、最后一行
for(int j=1;j<=n;j++){
if(j==1 || j==n){//每行的第一列和最后一列
cout<<'|';
}else{//其它列
cout<<'-';
}
}
}else{//其它行
for(int j=1;j<=n;j++){
if(j==1 || j==n){
cout<<'|';
}else{
cout<<'x';
}
}
}
cout<<endl;
}
return 0;
}
文末彩蛋: