top1编程
← 返回题目
题解

【入门】打印空心等腰三角形

1 条题解

  • 0
    @ 2026-7-31 10:16:36

    解题思路

    题目要求打印一个边长为 n 的等腰三角形。拿 n=5 来看:

        *
       * *
      *   *
     *     *
    *********
    

    每一行可以分成两部分:

    1. 前面的空格:第 i 行(从 0 开始)有 n-1-i 个空格,越往下越少
    2. 星号:分三种情况
      • 第一行:只有 1 个星
      • 最后一行:一整排 2n-1 个星
      • 中间行:左边 1 个星,中间空 2i-1 格,右边 1 个星

    为什么中间空 2i-1 格? 因为每一行往下一格,左右两边的星就要各往外扩一格,中间的缝隙就多 2 格。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
    
        for (int i = 0; i < n; i++) {
            // 输出前面的空格
            for (int j = 0; j < n - 1 - i; j++) cout << ' ';
            if (i == n - 1) {
                // 最后一行:2n-1 个星
                for (int j = 0; j < 2 * n - 1; j++) cout << '*';
            } else if (i == 0) {
                // 第一行:1 个星
                cout << '*';
            } else {
                // 中间行:左边星 + 中间空格 + 右边星
                cout << '*';
                for (int j = 0; j < 2 * i - 1; j++) cout << ' ';
                cout << '*';
            }
            cout << endl;
        }
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N²),每行打印的字符数加起来约等于 n²
    • 空间复杂度:O(1)
    • 1