小鹿上楼梯,一步可以迈 1 个台阶或者 2 个台阶,现共有 n 个台阶,请您编写程序计算小鹿上到第 n 个台阶共有几种走法。 输入描述 一个整数 n,表示共有的台阶数量。 输出描述 一个整数,表示小鹿上到第 n 台阶的总走法数。
时间: 2024-10-02 22:01:27 浏览: 41
这是一个经典的动态规划(Dynamic Programming)问题,通常被称为“爬楼梯”或“走楼梯”的问题。我们可以使用斐波那契数列的思路来求解,因为每一步可以迈1个或2个台阶,所以对于每个位置n,它的走法就是前两个位置(n-1, n-2)的走法之和。如果只有1个台阶,只有一种走法;如果没有台阶,也无走法。代码如下:
```cpp
#include <iostream>
int climbStairs(int n) {
if (n == 0 || n == 1) { // 基本情况:一个台阶或者没有台阶
return n;
}
int dp[n + 1]; // 动态规划数组,dp[i]表示到达i步的方法数
dp[0] = 0; // 初始化dp[0]为0,因为没有之前的台阶可踩
dp[1] = 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;
std::cout << "请输入台阶数:";
std::cin >> n;
std::cout << "上到第" << n << "个台阶有 " << climbStairs(n) << " 种走法。\n";
return 0;
}
```
阅读全文