爬楼梯,可以每次走1级或者2级,输入楼梯的级数,求不同的走法数 c++代码提示
时间: 2024-04-12 08:29:21 浏览: 133
当楼梯的级数为n时,不同的走法数等于前两级楼梯的走法数之和。
可以使用动态规划来解决这个问题,定义一个数组dp存储不同级数楼梯的走法数,初始状态dp[0]=1,dp[1]=1,然后从2开始迭代计算dp[i]=dp[i-1]+dp[i-2],最后返回dp[n]即为结果。
以下是C++代码示例:
```cpp
#include <iostream>
using namespace std;
int climbStairs(int n) {
if (n <= 1)
return 1;
int dp[n+1];
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <= n; i++) {
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
int main() {
int n;
cout << "请输入楼梯的级数:";
cin >> n;
cout << "不同的走法数为:" << climbStairs(n) << endl;
return 0;
}
```
你可以将以上代码复制到C++编译器中运行,输入楼梯的级数即可得到不同的走法数。
相关问题
树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。 例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共3种方法。但是如果第二层楼梯坏了,就只能先走到第一层,再走到第三层;c++代码
你可以使用递归来解决这个问题。下面是一个使用C++编写的示例代码:
```cpp
#include <iostream>
using namespace std;
int countWays(int n) {
if (n <= 1) {
return 1;
}
if (n == 2) {
return 2;
}
return countWays(n - 1) + countWays(n - 2);
}
int main() {
int n;
cout << "请输入楼梯的级数:";
cin >> n;
int ways = countWays(n);
cout << "不同的走法数:" << ways << endl;
return 0;
}
```
在这个代码中,`countWays`函数使用递归来计算不同的走法数。当楼梯级数为0或1时,只有一种走法;当级数为2时,有两种走法;对于其他级数,可以选择先走一级,然后计算剩余的级数的走法数,或者先走两级,然后计算剩余的级数的走法数。最后将两种情况的走法数相加即可得到总的走法数。
注意,这种解法的时间复杂度是指数级的,因为它会重复计算一些子问题。在实际应用中,可以使用动态规划来优化解法,避免重复计算,从而提高性能。
爬楼梯:每次走1级,2级或3级 递归 C++算法
当解决爬楼梯问题时,可以使用递归算法来求解。下面是一个使用C++实现的递归算法:
```cpp
#include <iostream>
// 递归函数
int climbStairs(int n) {
// 递归终止条件
if (n <= 0) {
return 0;
} else if (n == 1) {
return 1;
} else if (n == 2) {
return 2;
} else if (n == 3) {
return 4;
}
// 递归调用
return climbStairs(n - 1) + climbStairs(n - 2) + climbStairs(n - 3);
}
int main() {
int n = 5; // 楼梯的级数
int ways = climbStairs(n);
std::cout << "爬楼梯的方法数为:" << ways << std::endl;
return 0;
}
```
这个算法中,我们定义了一个递归函数`climbStairs`,它接受一个参数n,表示楼梯的级数。在函数中,我们首先判断递归结束的条件(当n小于等于0时,不能继续爬楼梯),然后对于不同的n值,返回对应的结果。对于n大于3的情况,我们使用递归调用来计算爬楼梯的方法数。最后,在主函数中调用递归函数并输出结果。
注意,这种递归算法会出现大量的重复计算,效率较低。可以考虑使用动态规划等其他算法来优化。
阅读全文