题解
星号组成字母E
1 条题解
-
0
解题思路
这道题不需要输入,只需要把 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