CCF-GESP计算机学会等级考试2026年6月二级C++T2 菱形
·
B4554 [GESP202606 二级] 菱形
题目描述
给定正整数 nnn,在 (2n−1)×(2n−1)(2n - 1) \times (2n - 1)(2n−1)×(2n−1) 个网格的画布中,使用字符画一个边长为 nnn 个网格的菱形。其中,空白网格使用 ⋅\cdot⋅ 表示,菱形边所在的网格用 +++ 表示。
例如当 n=3n = 3n=3 时,图形如下:
..+..
.+.+.
+...+
.+.+.
..+..
输入格式
输入一个正整数 nnn;
输出格式
输出 2n−12n - 12n−1 行,表示按要求画的菱形。
输入输出样例 #1
输入 #1
4
输出 #1
...+...
..+.+..
.+...+.
+.....+
.+...+.
..+.+..
...+...
说明/提示
数据范围
3≤n≤153 \le n \le 153≤n≤15。
解析
这道题跟去年(25年)9月份的题几乎是一样的。
解法一,矩阵中左上到右下的斜线,行和列的差相等,右上到左下的斜线,行和列的和相等。判断是否位于四条斜线上,是就打印+,不是就打印’.',详见代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n;
n=n*2-1;
m=n/2+1;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if (i+j==m+1||i-j==m-1||j-i==m-1||i+j==m*3-1){
cout<<'+';
}else{
cout<<'.';
}
}
cout<<endl;
}
return 0;
}
解法二,做一个二维的字符数组,在数组中依次把四条线写进去,然后打印整个数组,详见代码:
#include<bits/stdc++.h>
using namespace std;
char a[105][105];
int n;
int main(){
cin>>n;
n=n*2-1;
for(int j=n/2+1,i=1;j>=1;j--,i++){
a[i][j]='+';
}
for(int j=n/2+1,i=1;j<=n;j++,i++){
a[i][j]='+';
}
for(int i=n/2+1,j=1;i<=n;j++,i++){
a[i][j]='+';
}
for(int i=n/2+1,j=n;i<=n;j--,i++){
a[i][j]='+';
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if (a[i][j]==0){
cout<<'.';
}else{
cout<<a[i][j];
}
}
cout<<endl;
}
return 0;
}
更多推荐

所有评论(0)