GESP认证C++编程真题解析 | B4412 [GESP202506 二级] 菱形
欢迎大家订阅我的CSDN专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!
专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。
适合人群:
- 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
- 希望系统学习C++/Python编程的初学者
- 想要提升算法与编程能力的编程爱好者
附上汇总帖:GESP认证C++编程真题解析 | 汇总
【题目来源】
洛谷:[B4412 GESP202509 二级] 菱形 - 洛谷
【题目描述】
小 A 想绘制一个菱形。具体来说,需要绘制的菱形是一个 $n$ 行 $n$ 列的字符画,$n$ 是一个大于 $1$ 的奇数。菱形的四个顶点依次位于第 $1$ 行、第 $1$ 列、第 $n$ 行、第 $n$ 列的正中间,使用 # 绘制。相邻顶点之间也用 # 连接。其余位置都是 .。
例如,一个 $5$ 行 $5$ 列的菱形字符画是这样的:
..#..
.#.#.
#...#
.#.#.
..#..
给定 $n$,请你帮小 A 绘制对应的菱形。
【输入】
一行,一个正整数 $n$。
【输出】
输出共 $n$ 行,表示对应的菱形。
【输入样例】
3
【输出样例】
.#.
#.#
.#.
【算法标签】
《洛谷 B4412 菱形》 #循环结构# #GESP# #2025#
【代码详解】
#include <bits/stdc++.h>
using namespace std;
const int N = 35; // 定义二维数组的最大尺寸
int n; // 存储输入的图案尺寸
char a[N][N]; // 二维字符数组,用于存储图案
int main()
{
// 输入图案的尺寸n
cin >> n;
// 初始化整个图案为全'.'
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
a[i][j] = '.';
}
}
// 绘制图案上半部分的'#'(从顶部到中间)
int t = n / 2 + 1; // 中间列的位置
for (int i = 1; i <= n / 2 + 1; i++)
{
a[i][t] = '#'; // 在当前行的中间列位置放置'#'
a[i][(n / 2 + 1) * 2 - t] = '#'; // 对称位置放置'#'
t--; // 向两侧扩展
}
// 绘制图案下半部分的'#'(从中间到底部)
t = 1; // 从第一列开始
for (int i = (n / 2 + 1); i <= n; i++)
{
a[i][t] = '#'; // 在当前行的两侧位置放置'#'
a[i][(n / 2 + 1) * 2 - t] = '#'; // 对称位置放置'#'
t++; // 向中间收缩
}
// 输出最终图案
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
cout << a[i][j];
}
cout << endl; // 每行输出后换行
}
return 0;
}
【运行结果】
3
.#.
#.#
.#.

浙公网安备 33010602011771号