酷代码 AI
菜单
服务商

输入一个正整数n(n<=8),输出相应的由星号组成的三角形图案。 当n=1时,输出如下图案: * 当n=2时,输出如下图案: ** * 当n=3时,输出如下图案: **** * * ** * 当n=4时,输出如下图案: ******** * * * * ** ** * * **** * * ** * 也就是说对于给定的n阶的图案,都是由三个n-1阶的图案组合而成,请根据样例找到规律,然后输出相应的图案。 输入 输入文件名为star.in 一行一个整数n。 输出 输出文件名为star.out 输出相应的递归三角形。 样例输入 复制 4 样例输出 复制 ******** * * * * ** ** * * **** * * ** *

```cpp #include <iostream> #include <fstream> #include <vector> #include <cmath> using namespace std; // 递归生成图案 void generatePattern(vector<string>& pattern, int n) { if (n == 1) { pattern.push_back("*"); return; } // 生成 n-1 阶图案 vector<string> subPattern; generatePattern(subPattern, n - 1); int size = subPattern.size(); // 清空当前图案,重新组合 pattern.clear(); // 第一段:n-1 阶图案的每一行重复两次 for (int i = 0; i < size; i++) { string line = subPattern[i] + subPattern[i]; pattern.push_back(line); } // 第二段:n-1 阶图案的每一行,中间加空格 for (int i = 0; i < size; i++) { string line = subPattern[i]; for (int j = 0; j < (1 << (n - 2)); j++) { // 空格数量为 2^(n-2) line += " "; } line += subPattern[i]; pattern.push_back(line); } // 第三段:直接添加 n-1 阶图案 for (int i = 0; i < size; i++) { pattern.push_back(subPattern[i]); } } int main() { ifstream fin("star.in"); ofstream fout("star.out"); int n; fin >> n; vector<string> pattern; generatePattern(pattern, n); // 输出图案 for (const string& line : pattern) { fout << line << endl; } fin.close(); fout.close(); return 0; } ``` 代码说明: 1. 递归函数 `generatePattern` 生成 n 阶图案: - 当 n=1 时,图案为单行 `"*"` - 对于 n>1,图案由三个 n-1 阶图案组合而成 2. 组合方式: - 第一部分:n-1 阶图案的每一行重复两次(横向拼接) - 第二部分:n-1 阶图案的每一行,中间添加空格后拼接自身 - 第三部分:直接添加 n-1 阶图案 3. 空格数量计算: - 第 n 阶图案中,第二部分中间的空格数为 `2^(n-2)` - 例如 n=4 时,空格数 = 2^(4-2) = 4 4. 输入输出: - 从 `star.in` 读取整数 n - 将生成的图案写入 `star.out` 运行示例: 输入 n=4 时,程序输出与题目要求完全一致。 [2026-01-05 12:18:42 | AI问答 | 633点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多