冬冬爬楼梯,一步可以1级,也可以爬2级、3级。冬冬很可爱,每到一处楼梯处,他都想知道直完这个楼梯有多少种走法。但由于有的时候楼梯级数太多,可能是个天文数字,很显然,对于还处于小学5年级的冬冬是不太现实的。聪明的你,能帮冬冬实现这个愿望吗?用c++代码实现
时间: 2024-06-04 11:12:29 浏览: 221
#include <stdio.h>
int main()
{
int n;
printf("请输入楼梯的级数:");
scanf("%d", &n);
int dp[n+1];
dp[0] = 1;
dp[1] = 1;
dp[2] = 2;
for(int i=3; i<=n; i++)
{
dp[i] = dp[i-1] + dp[i-2] + dp[i-3];
}
printf("一共有 %d 种走法\n", dp[n]);
return 0;
}
相关问题
冬冬爬楼梯 python
冬冬爬楼梯的Python程序是一个经典的动态规划问题。根据引用,如果楼梯的阶数为5,则冬冬爬楼梯的方法有13种。根据引用,我们可以使用递归的方法来解决这个问题,即将楼梯的阶数减去1、2或3,直到减到0,然后返回结果的总和。
下面是一个冬冬爬楼梯的Python程序示例:
```python
def climb_stairs(n):
if n <= 0:
return 0
if n == 1:
return 1
if n == 2:
return 2
if n == 3:
return 4
return climb_stairs(n-1) + climb_stairs(n-2) + climb_stairs(n-3)
n = 5
ways = climb_stairs(n)
print("冬冬爬楼梯的方法有", ways, "种")
```
c++冬冬爬楼梯动态规划
冬冬爬楼梯动态规划问题是一个经典的动态规划问题,假设冬冬要爬n个台阶,每次只能爬1个或2个台阶,问他有多少种不同的爬法。
解决这个问题可以使用动态规划的思想,我们可以定义一个数组dp,其中dp[i]表示爬到第i个台阶的不同爬法数量。
那么,对于dp[i]来说,它的值可以由dp[i-1]和dp[i-2]转移得到,因为每次只能爬1个或2个台阶。所以,状态转移方程为:
dp[i] = dp[i-1] + dp[i-2]
边界条件为dp[1] = 1,dp[2] = 2,因为只有一个台阶时只有1种爬法,有两个台阶时有2种爬法。
最终,dp[n]就是冬冬爬到第n个台阶的不同爬法数量。
下面是Python实现代码:
```
def climbStairs(n: int) -> int:
if n <= 2:
return n
dp = [0] * (n+1)
dp[1] = 1
dp[2] = 2
for i in range(3, n+1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
```
时间复杂度为O(n),空间复杂度为O(n)。
阅读全文