题解:洛谷 B2025 输出字符菱形

【题目来源】

洛谷:B2025 输出字符菱形 - 洛谷

【题目描述】

* 构造一个对角线长 5 个字符,倾斜放置的菱形。

【输入】

【输出】

如样例所示。用 * 构成的菱形。

【输入样例】

【输出样例】

【核心思想】

  1. 问题分析:要求输出一个对角线长为 5 个字符的菱形图案,由 * 构成。菱形上半部分逐行增加星号数量(1, 3, 5),下半部分逐行减少(3, 1),每行星号居中排列。

  2. 算法选择

    • 直接输出:菱形尺寸固定且极小,无需循环构造,直接用 cout 逐行输出即可
  3. 关键步骤

    • 包含头文件#include <iostream> 引入输入输出流库
    • 使用命名空间using namespace std;
    • 逐行输出
      • 第 1 行:" *"(2 个空格 + 1 个星号)
      • 第 2 行:" ***"(1 个空格 + 3 个星号)
      • 第 3 行:"*****"(0 个空格 + 5 个星号)
      • 第 4 行:" ***"(1 个空格 + 3 个星号)
      • 第 5 行:" *"(2 个空格 + 1 个星号)
    • 换行控制:每行末尾用 endl 换行
  4. 时间/空间复杂度

    • 时间复杂度:\(O(1)\),固定 5 行输出
    • 空间复杂度:\(O(1)\),无额外存储
  5. 固定图案输出的核心思想

    • 空间对称性:菱形关于中心行对称,上半部分和下半部分的空格数呈镜像关系
    • 直接硬编码:对于尺寸固定且极小的图案,直接输出比编写循环构造更简洁高效
    • 格式化控制:通过前置空格数量控制居中效果,星号数量按等差数列变化
    • 适用于固定尺寸图形输出、格式控制类入门问题

【算法标签】

入门 #语法基础

【代码详解】

#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;  // 返回程序执行成功状态码
}

【运行结果】

  *
 ***
*****
 ***
  *
posted @ 2026-08-05 15:43  团爸讲算法  阅读(33)  评论(0)    收藏  举报