题目:小青蛙跳台阶问题
问题描述:
一只小青蛙想要跳上一段有n级台阶的楼梯。小青蛙每次跳跃时,可以选择跳1级台阶或者2级台阶。请你编写一个程序,计算小青蛙跳上这段n级台阶楼梯共有多少种不同的跳法。
要求:
- 输入一个正整数
n,表示台阶的总级数(1 ≤ n ≤ 100)。 - 输出一个整数,表示小青蛙跳上
n级台阶的不同跳法总数。 - 输出具体的跳跃方法分别有哪些。
主要流程图:

源代码:
#include <iostream>
#include <vector>
using namespace std;
// 辅助函数,用于回溯并打印所有跳跃组合
void printJumps(const vector<int>& jumps) {
for (int jump : jumps) {
cout << jump << " ";
}
cout << endl;
}
// 递归函数,用于生成所有跳跃组合
void generateJumps(int n, int current, vector<int>& jumps, vector<vector<int>>& allJumps) {
if (current == n) {
// 当达到目标台阶数时,打印当前组合
allJumps.push_back(jumps);
return;
}
if (current > n) {
// 如果当前台阶数超过目标,则回溯
return;
}
// 尝试跳1级
jumps.push_back(1);
generateJumps(n, current + 1, jumps, allJumps);
jumps.pop_back();
// 尝试跳2级(如果当前不是最后一级的话)
if (current + 2 <= n) {
jumps.push_back(2);
generateJumps(n, current + 2, jumps, allJumps);
jumps.pop_back();
}
}
int main() {
int n;
cout << "请输入台阶数: ";
cin >> n;
// 确保输入为正整数
if (n < 1) {
cout << "请输入一个正整数。" << endl;
return 1;
}
vector<int> jumps;
vector<vector<int>> allJumps;
// 生成所有跳跃组合
generateJumps(n, 0, jumps, allJumps);
// 输出结果
cout << "小青蛙跳上" << n << "级台阶的方法数是: " << allJumps.size() << endl;
cout << "具体的跳跃方法有:" << endl;
for (const vector<int>& jumpSequence : allJumps) {
printJumps(jumpSequence);
}
return 0;
}
运行截图:
531

被折叠的 条评论
为什么被折叠?



