一只青蛙上台阶,它一次可以跳一层台阶或两层台阶。请问它上n层台阶有多少种跳法。 输入描述 输入一个整数n,表示台阶数。(1≤n≤20) 输出描述 一个整数,表示跳法的数量。
时间: 2024-12-29 16:30:01 浏览: 16
这是一个经典的动态规划问题,通常称为“青蛙跳台阶”或者“爬楼梯”。我们可以使用一个二维数组`dp`来存储到达第`i`层台阶的不同跳法数。其中`dp[i]`表示到达第`i`层的方法数。递推关系如下:
- 如果只跳一层(即一步),那么从第`i-1`层到第`i`层有1种方法,所以`dp[i] = dp[i-1]`;
- 如果跳两层,那么从第`i-2`层到第`i`层有`dp[i-2]`种方法,因为前一步可以是从第`i-2`层来的,所以`dp[i] += dp[i-2]`。
初始条件是`dp[0] = 1`(从地面到0层台阶有1种方法,就是不跳)和`dp[1] = 1`(从地面到1层台阶有1种方法,就是直接跳上去)。
下面是C++代码实现:
```cpp
#include <iostream>
int jump(int n) {
if (n <= 0) return 0;
int dp[n + 1];
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <= n; ++i) {
dp[i] = 0;
if (i - 1 >= 0) dp[i] += dp[i - 1]; // 一步一阶
if (i - 2 >= 0) dp[i] += dp[i - 2]; // 一步两阶
}
return dp[n];
}
int main() {
int n;
std::cin >> n;
std::cout << "青蛙有 " << jump(n) << " 种跳法上 " << n << " 层台阶。\n";
return 0;
}
```
阅读全文