楼梯有 N N 阶,上楼可以一步上一阶,也可以一步上二阶。 编一个C++程序,计算共有多少种不同的走法。
时间: 2024-09-16 07:01:02 浏览: 71
在C++中,解决这个问题通常可以用动态规划(Dynamic Programming)的方法。我们可以创建一个大小为`N+1`的数组`dp`,其中`dp[i]`表示到达第`i`级楼梯的不同走法数。因为每次上楼可以选择一步一阶或者一步两阶,所以到达第`i`级有两种可能:从第`i-1`级直接一步上来或者从第`i-2`级两步上来。因此,状态转移方程可以表示为:
```cpp
dp[i] = dp[i-1] + dp[i-2]; // 一步一阶的情况加上一步两阶的情况
初始化时,第一级有一种走法(一步一阶),第二级有两种走法(一步一阶和一步两阶):
dp[1] = 1;
dp[2] = 2;
最后的答案就是`dp[N]`,即达到第`N`级楼梯的不同走法总数。
以下是相应的C++代码示例:
```cpp
#include <iostream>
using namespace std;
int climbStairs(int n) {
int dp[n+1];
dp[0] = 1; // 第0级有1种走法(空)
dp[1] = 2; // 第1级有2种走法(一步一阶或一步两阶)
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) << " 种不同的走法。\n";
return 0;
}
```
阅读全文