楼梯有 n (30 > n > 0) 阶台阶,上楼时可以一步上 1 阶,也可以一步上 2 阶,也可以一步上 3 阶,编程计算共有多少种不同的走法。c++简单代码
时间: 2024-03-03 07:48:58 浏览: 113
以下是用 C++ 实现的动态规划解法:
```c++
#include <iostream>
using namespace std;
int count_ways(int n) {
if (n < 0) {
return 0;
}
if (n == 0) {
return 1;
}
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];
}
return dp[n];
}
int main() {
int n = 4;
cout << "Number of ways to climb " << n << " stairs: " << count_ways(n) << endl;
return 0;
}
```
其中,变量 `dp` 为动态规划数组,`dp[i]` 表示走到第 `i` 阶台阶的不同走法数量。
当 `n=4` 时,输出为:
```
Number of ways to climb 4 stairs: 7
```
表示走到第4阶台阶有7种不同的走法。
相关问题
楼梯有 n (30 > n > 0) 阶台阶,上楼时可以一步上 1 阶,也可以一步上 2 阶,也可以一步上 3 阶,编程计算共有多少种不同的走法。
好的,这是一个动态规划的问题。我们可以用一个数组 dp 来记录到达每一个台阶的不同走法数目。假设 dp[i] 表示到达第 i 阶台阶的不同走法数目,那么有以下状态转移方程:
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
其中,dp[1] = 1, dp[2] = 2, dp[3] = 4。因为只有 1 阶台阶时只有一种走法,2 阶台阶时有两种走法(一步一步或者一次跨两步),3 阶台阶时有四种走法(分别为 1+1+1、1+2、2+1、3)。
最终的答案就是 dp[n]。下面是 Python 代码实现:
```python
n = int(input())
dp = [0] * (n + 1)
dp[1] = 1
dp[2] = 2
dp[3] = 4
for i in range(4, n+1):
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
print(dp[n])
```
楼梯有 n (30 > n > 0) 阶台阶,上楼时可以一步上 1 阶,也可以一步上 2 阶,也可以一步上 3 阶,c语言编程计算共有多少种不同的走法。
好的,这也是一个动态规划的问题。我们可以用一个数组 dp 来记录到达每一个台阶的不同走法数目。假设 dp[i] 表示到达第 i 阶台阶的不同走法数目,那么有以下状态转移方程:
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
其中,dp[1] = 1, dp[2] = 2, dp[3] = 4。因为只有 1 阶台阶时只有一种走法,2 阶台阶时有两种走法(一步一步或者一次跨两步),3 阶台阶时有四种走法(分别为 1+1+1、1+2、2+1、3)。
最终的答案就是 dp[n]。下面是 C 语言代码实现:
```c
#include <stdio.h>
int main() {
int n, i;
long long dp[31] = {0};
scanf("%d", &n);
dp[1] = 1;
dp[2] = 2;
dp[3] = 4;
for (i = 4; i <= n; i++) {
dp[i] = dp[i-1] + dp[i-2] + dp[i-3];
}
printf("%lld\n", dp[n]);
return 0;
}
```
需要注意的是,我们用了一个 long long 类型的数组来保存结果,因为结果可能非常大,超过了 int 类型的范围。
阅读全文