酷代码 AI
菜单

1213: 递归三角形 内存限制:128 MB 时间限制:1.000 S 评测方式:文本比较 命题人:外部导入 提交:21 解决:9 题目描述 输入一个正整数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(); // 第一行:两个 n-1 阶图案并排 string firstLine = subPattern[0] + subPattern[0]; pattern.push_back(firstLine); // 中间部分:交错排列 for (int i = 1; i < size; i++) { string line = subPattern[i]; // 添加空格使长度对齐 int spaces = pow(2, n - 1) - line.length() * 2; line += string(spaces, ' '); 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=1时图案为单个星号"*" - 递归步骤:n阶图案由三个n-1阶图案组合而成 - 第一行:两个n-1阶图案的第一行并排 - 中间行:交错排列,中间用空格填充对齐 - 最后部分:完整的n-1阶图案 2. 空格计算: - n阶图案宽度为2^(n-1) - 中间空格数 = 总宽度 - 两个子图案宽度 3. 输入输出: - 从`star.in`读取整数n - 结果输出到`star.out` - 每行图案后换行 4. 时间复杂度:O(2^n),空间复杂度:O(2^n) 运行示例: 输入n=4时,程序输出与题目要求完全一致。 [2026-01-05 12:19:53 | AI问答 | 570点数解答]

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