题解
【入门】打印空心等腰三角形
1 条题解
-
0
解题思路
题目要求打印一个边长为 n 的等腰三角形。拿 n=5 来看:
* * * * * * * *********每一行可以分成两部分:
- 前面的空格:第 i 行(从 0 开始)有 n-1-i 个空格,越往下越少
- 星号:分三种情况
- 第一行:只有 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