小鹿上楼梯,一步可以迈1个台阶、2个台阶或3个台阶,现共有n个台阶,请编写C++程序计算
时间: 2024-09-07 11:04:26 浏览: 40
小鹿上楼梯问题实际上是一个经典的动态规划问题,可以用来计算爬楼梯的不同方法数。这个问题可以看作是斐波那契数列的推广,因为每一步可以迈1、2或3个台阶,所以到达第n个台阶的方法数是由到达第(n-1)、(n-2)和(n-3)个台阶的方法数之和组成的。
以下是一个C++程序示例,用于计算小鹿上n个台阶的方法数:
```cpp
#include <iostream>
using namespace std;
// 计算上n个台阶的方法数
int climbStairs(int n) {
if (n <= 1) {
return 1;
} else if (n == 2) {
return 2;
}
int dp[n + 1];
dp[0] = 1; // 到达第0个台阶有1种方法,就是不爬
dp[1] = 1; // 到达第1个台阶有1种方法,就是迈一步
dp[2] = 2; // 到达第2个台阶有2种方法,迈两步或两步各迈一步
// 从第3个台阶开始计算
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;
cout << "请输入台阶数n: ";
cin >> n;
cout << "共有" << climbStairs(n) << "种方法上" << n << "个台阶。" << endl;
return 0;
}
```
这段代码首先定义了一个递归函数`climbStairs`,使用动态规划的方法计算上n个台阶的方法数。然后在`main`函数中接受用户输入的台阶数,并调用`climbStairs`函数来计算结果并输出。
阅读全文