酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

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]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]