问题 F: 走楼梯(难) 时间限制: 1.000 Sec 内存限制: 128 MB 提交: 51 解决: 24 [命题人:][下载数据: ?] 题目描述 树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。 例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共3种方法。但是如果第二层楼梯坏了,就只能先走到第一层,再走到第三层; 输入 第一行一个正整数M表示坏了的楼梯所在层; 第二行开始输入包含若干行,每行包含一个正整数N,代表楼梯级数,1≤M≤N≤30。 输出 不同的走法数,每一行输入对应一行输出。 样例 输入 复制 4 5 8 10 输出 复制 3 9 24 c++代码
时间: 2024-04-09 07:28:54 浏览: 37
QXDM5 安装包版本号:QXDM5.5.1.350.1可解析:LTE、NR包含:Qcat,QUTS,QXDM5
4星 · 用户满意度95%
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 动态规划求解不同的走法数
int climbStairs(int n, int m) {
vector<int> dp(n + 1, 0);
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <= n; i++) {
if (i == m) {
dp[i] = dp[i - 1];
} else {
dp[i] = dp[i - 1] + dp[i - 2];
}
}
return dp[n];
}
int main() {
int m;
cin >> m;
int n;
while (cin >> n) {
cout << climbStairs(n, m) << endl;
}
return 0;
}
```
这段代码使用动态规划的思想求解不同的走法数。在`climbStairs`函数中,使用一个一维数组`dp`来保存每个楼梯级数对应的不同走法数。初始状态为`dp[0] = 1`和`dp[1] = 1`,然后通过循环计算出其他楼梯级数的走法数。
在`main`函数中,首先读取输入的坏了的楼梯所在层`m`,然后通过循环读取楼梯级数`n`,并调用`climbStairs`函数输出不同的走法数。
希望这次提供的代码能够满足您的需求!如果有任何问题,请随时向我提问。
阅读全文