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>usingnamespacestd;intmain(){intn,m;cin>>n;n=n*2-1;m=n/2+1;for(inti=1;i<=n;i++){for(intj=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;}return0;}解法二,做一个二维的字符数组,在数组中依次把四条线写进去,然后打印整个数组,详见代码:
#include<bits/stdc++.h>usingnamespacestd;chara[105][105];intn;intmain(){cin>>n;n=n*2-1;for(intj=n/2+1,i=1;j>=1;j--,i++){a[i][j]='+';}for(intj=n/2+1,i=1;j<=n;j++,i++){a[i][j]='+';}for(inti=n/2+1,j=1;i<=n;j++,i++){a[i][j]='+';}for(inti=n/2+1,j=n;i<=n;j--,i++){a[i][j]='+';}for(inti=1;i<=n;i++){for(intj=1;j<=n;j++){if(a[i][j]==0){cout<<'.';}else{cout<<a[i][j];}}cout<<endl;}return0;}