C++ 翻转等腰三角形星号金字塔打印实现
这是一道经典的 **翻转等腰三角形** 打印问题,非常适合初学者练习 **循环嵌套** 和 **空格/星号关系**。 下面我将为你提供完整的 C++ 解题方案,并详细解析其原理。 --- ## 💡 题目分析 我们需要打印一个 **倒着的等腰三角形**。对于 `n=5` 的情况: - 第 1 行:0 个空格,9 个星号 - 第 2 行:1 个空格,7 个星号 - 第 3 行:2 个空格,5 个星号 - 第 4 行:3 个空格,3 个星号 - 第 5 行:4 个空格,1 个星号 **关键规律**: - **空格数** = 当前行号 - 1(从 0 开始计数) - **星号数** = `2 * (n - 当前行号) - 1` --- ## 🔧 C++ 代码实现 ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; // 读取层数 for (int i = 0; i < n; i++) { // 打印前面的空格 for (int j = 0; j < i; j++) { cout << " "; } // 打印星号 for (int k = 0; k < 2 * (n - i) - 1; k++) { cout << "*"; } // 每行结束后换行 cout << endl; } return 0; } ``` --- ## 📝 代码逐层解析 | 变量/循环 | 作用 | |-----------|------| | `n` | 用户输入的金字塔层数 | | `i` | 外层循环变量,控制行号(从 0 到 n-1) | | `j` 循环 | 打印每行前面的空格,空格数量等于当前行号 `i` | | `k` 循环 | 打印星号,星号数量 = `2 * (n - i) - 1` | | `cout << endl` | 每行打印完毕后换行 | --- ## 📊 示例运行过程(n=5) | 行号 i | 空格数 | 星号数 (`2*(5-i)-1`) | 输出 | |--------|--------|----------------------|------| | 0 | 0 | 9 | ********* | | 1 | 1 | 7 | ******* | | 2 | 2 | 5 | ***** | | 3 | 3 | 3 | *** | | 4 | 4 | 1 | * | --- ## 🚨 常见陷阱与注意事项 1. **忘记输出空格**:只输出星号会变成左对齐的倒三角,而不是居中的等腰三角形。 2. **空格与星号顺序**:必须先输出空格,再输出星号,否则无法形成倒三角。 3. **换行位置**:每行打印完星号后必须 `cout << endl`,否则所有内容会连成一行。 4. **边界情况**:`n=1` 时,只有一行且直接输出一个星号,代码依然正常工作。 --- ## 💡 开发建议 - **学会推导公式**:打印图案的核心是找出行号与空格/星号之间的数学关系。这类题目在面试中也很常见。 - **使用 `std::string` 简化写法**(高级扩展): ```cpp for (int i = 0; i < n; i++) { cout << string(i, ' ') << string(2 * (n - i) - 1, '*') << endl; } ``` 这种方法更简洁,但需要理解 `string(count, char)` 的构造方式。 - **注意性能**:本题数据量小,`O(n²)` 完全足够。但如果需要打印超大金字塔,可以考虑用 `std::cout` 输出优化(例如减少 endl 次数,改用 `'\n'`)。 --- ## 📚 相关学习资源 - [C++ 参考手册 - string 构造函数](https://en.cppreference.com/w/cpp/string/basic_string/basic_string) - 算法竞赛入门经典(刘汝佳)—— 循环与图案打印章节 - LeetCode 相关题目:*打印倒三角 / 打印菱形 / 数字三角形* --- ######[AI写代码神器 | 1019点数解答 | 2026-07-03 20:51:37]
- C语言实现整数“第二数位”翻转:代码详解与复杂度分析(字节豆包 | 523点数解答 | 2025-11-10 19:54:57)127
- C++实现整数“第二数位”翻转:代码详解与复杂度分析(字节豆包 | 462点数解答 | 2025-11-10 20:30:20)129
- C++ 实现三角形类型判断:小心三边条件、判断顺序与整数溢出!(DeepSeek | 214点数解答 | 2025-08-24 17:31:55)244
- C++ 实现:根据三边长度判断三角形类型(附代码及详细解释)(字节豆包 | 437点数解答 | 2026-01-24 20:19:56)92
- 利用C++判断三条边能否构成三角形及特殊三角形类型(字节豆包 | 234点数解答 | 2026-04-12 16:28:21)35
- 使用C++判断三角形类型的实现及开发建议(字节豆包 | 632点数解答 | 2026-05-22 21:06:05)30
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)502
- Python 实现:打印 -n 到 n 范围内所有整数的代码及详解(字节豆包 | 232点数解答 | 2025-12-07 12:30:06)121
- Python代码:轻松打印 0 到输入整数之间的所有整数(字节豆包 | 126点数解答 | 2025-12-12 18:21:54)86
- C++实现:输入整数打印 0 到该整数间所有整数及代码详解(字节豆包 | 228点数解答 | 2025-12-12 18:22:24)93
- Python实现:打印0到输入整数间所有整数的代码解析(字节豆包 | 264点数解答 | 2025-12-12 19:37:01)85
- Python 实现:打印 -n 到 n 范围内所有整数的代码及详解(字节豆包 | 214点数解答 | 2025-12-12 19:40:30)86