top1编程
← 返回题目
题解

星号组成字母E

1 条题解

  • 0
    @ 2026-8-4 1:58:27

    解题思路

    这道题不需要输入,只需要把 5 行星号按顺序打印出来,拼成一个字母 E。

    我们先把要求输出的图形抄下来观察一下:

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

    数一数:一共有 5 行。第 1 行、第 3 行、第 5 行都是 5 个星号,第 2 行、第 4 行都是 1 个星号。整个图形看起来就像一个 E:三条横线是 E 的上、中、下三横,第 2、4 行只有 1 个星号,正好是 E 左边的竖边。

    做法有很多种。最简单的方法是用 5 条 cout 语句一行一行直接打印。不过,我们还可以把整个图形提前存在一个"字符数组"(char 数组)里,再用一个循环一行一行打印出来。这样代码更整齐,还能顺便学会数组的用法,一举两得。

    数组 pic 怎么开?一共有 5 行,所以第一维是 5;每一行最多 5 个星号,而一行字符串的末尾还藏着一个看不见的结束标记,用来告诉程序"这行字到这儿就完了",所以每一行要开 6 格。把 5 行内容依次填进数组后,用 for 循环让 i 从 0 变到 4,每次输出 pic[i] 并换行,就得到和题目一模一样的图形了。

    小提醒:输出完一行一定要加 endl 换行,否则所有星号会挤在一行里,图形就"塌方"了。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        // 用字符数组把 5 行图形先存起来
        // 每行字符串最后都有一个看不见的结束标记,所以每行开 6 格
        char pic[5][6] = {
            "*****",   // 第 1 行:5 个星号
            "*",       // 第 2 行:1 个星号
            "*****",   // 第 3 行:5 个星号
            "*",       // 第 4 行:1 个星号
            "*****"    // 第 5 行:5 个星号
        };
    
        // 循环 5 次,把 5 行图形一行一行打印出来
        for (int i = 0; i < 5; i++) {
            cout << pic[i] << endl;   // 打印第 i 行,然后换行
        }
        return 0;
    }
    

    复杂度分析

    图形是固定的 5 行,没有输入数据,循环次数也固定是 5 次,和任何输入都没有关系。所以时间复杂度和空间复杂度都是 O(1),意思是"常数时间、常数空间":不管运行多少次,程序做的事情都一样多。

    • 1