题解:洛谷 B2025 输出字符菱形
【题目来源】
【题目描述】
用 * 构造一个对角线长 5 个字符,倾斜放置的菱形。
【输入】
无
【输出】
如样例所示。用 * 构成的菱形。
【输入样例】
无
【输出样例】

【核心思想】
-
问题分析:要求输出一个对角线长为 5 个字符的菱形图案,由
*构成。菱形上半部分逐行增加星号数量(1, 3, 5),下半部分逐行减少(3, 1),每行星号居中排列。 -
算法选择:
- 直接输出:菱形尺寸固定且极小,无需循环构造,直接用
cout逐行输出即可
- 直接输出:菱形尺寸固定且极小,无需循环构造,直接用
-
关键步骤:
- 包含头文件:
#include <iostream>引入输入输出流库 - 使用命名空间:
using namespace std; - 逐行输出:
- 第 1 行:
" *"(2 个空格 + 1 个星号) - 第 2 行:
" ***"(1 个空格 + 3 个星号) - 第 3 行:
"*****"(0 个空格 + 5 个星号) - 第 4 行:
" ***"(1 个空格 + 3 个星号) - 第 5 行:
" *"(2 个空格 + 1 个星号)
- 第 1 行:
- 换行控制:每行末尾用
endl换行
- 包含头文件:
-
时间/空间复杂度:
- 时间复杂度:\(O(1)\),固定 5 行输出
- 空间复杂度:\(O(1)\),无额外存储
-
固定图案输出的核心思想:
- 空间对称性:菱形关于中心行对称,上半部分和下半部分的空格数呈镜像关系
- 直接硬编码:对于尺寸固定且极小的图案,直接输出比编写循环构造更简洁高效
- 格式化控制:通过前置空格数量控制居中效果,星号数量按等差数列变化
- 适用于固定尺寸图形输出、格式控制类入门问题
【算法标签】
入门 #语法基础
【代码详解】
#include <iostream> // 包含标准输入输出流库
using namespace std; // 使用标准命名空间
/**
* 主函数 - 程序入口
* @return 程序执行状态码(0表示成功)
*/
int main()
{
// 输出钻石图案的上半部分
cout << " *" << endl; // 输出第一行,包含1个星号,居中显示
cout << " ***" << endl; // 输出第二行,包含3个星号,居中显示
cout << "*****" << endl; // 输出第三行,包含5个星号,居中显示
// 输出钻石图案的下半部分
cout << " ***" << endl; // 输出第四行,包含3个星号,居中显示
cout << " *" << endl; // 输出第五行,包含1个星号,居中显示
return 0; // 返回程序执行成功状态码
}
【运行结果】
*
***
*****
***
*
浙公网安备 33010602011771号