top1编程
← 返回题目
题解

【入门】放大的箭头

1 条题解

  • 0
    @ 2026-7-31 10:05:08

    解题思路

    这道题要打印一个 n 行的箭头图形,每行都有 n 颗星,但前面空格的个数不一样。

    拿 n=5 来看:

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

    你会发现:

    • 第 1 行前面 0 个空格
    • 第 2 行前面 1 个空格
    • 第 3 行(中间)前面 2 个空格
    • 第 4 行前面 1 个空格
    • 第 5 行前面 0 个空格

    空格数先变大再变小,正好等于"这一行到中间行的距离"。

    用 i 表示行号(从 0 开始),n 表示总行数:

    • 空格数 = min(i, n-1-i)

    比如 i=0:min(0,4)=0;i=1:min(1,3)=1;i=2:min(2,2)=2。

    所以每行先输出空格,再输出 n 颗星,就搞定了。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
    
        for (int i = 0; i < n; i++) {
            // 空格数 = 行到中间行的距离
            int k = i;
            if (n - 1 - i < k) k = n - 1 - i;
            for (int j = 0; j < k; j++) cout << ' ';
            // 每行 n 颗星
            for (int j = 0; j < n; j++) cout << '*';
            cout << endl;
        }
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N²),n 行每行打印 n 个字符
    • 空间复杂度:O(1)
    • 1