树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。 例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共3种方法。但是如果第二层楼梯坏了,就只能先走到第一层,再走到第三层;输入 复制 4 5 8 10 输出 复制 3 9 24 c++代码
时间: 2024-04-08 21:30:21 浏览: 64
js代码-假如你在爬楼梯,楼梯一共有N层,但你每次爬楼梯只能走一步或两步或三步,计算共有多少种走法?如何输出具体的走法呢?
以下使用动态规划的C++代码解决这个问题:
```cpp
#includeiostream>
#include <vector>
using namespace std;
countWays(int n) {
vector<int dp(n + 1, 0);
dp[0] = 1;
dp[1] = 1 for (int i =2; i <= n; i {
dp[i] =[i - 1] dp[i - 2];
}
return dp[n];
}
int main() {
int n;
cout << "请输入楼梯的级数:";
cin >> n;
int ways = countWays(n);
cout << "不同的走法数:" << ways << endl;
return 0;
}
```
在这个代码中,我们使用了一个动态规划数组 `dp`,其中 `dp[i]` 表示爬到第 `i` 级楼梯的不同走法数。初始化时,`dp[0]` 和 `dp[1]` 都为1,因为当楼梯级数为0或1时,只有一种走法。然后我们从第2级开始遍历,根据状态转移方程 `dp[i] = dp[i - 1] + dp[i - 2]` 来计算不同级数的走法数。最后返回 `dp[n]` 即可得到结果。
你可以输入不同的楼梯级数进行测试,代码会输出对应的不同走法数。
阅读全文