假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 或3个台阶。你有多少种不同的方法可以爬到楼顶呢?用c语言
时间: 2024-11-03 08:19:56 浏览: 43
这是一个经典的动态规划问题,通常被称为“爬楼梯”问题。可以用斐波那契数列的思路来解决,因为每一步上楼都有三种可能的方式:前一步+1阶、前两步+2阶或前三步+3阶,这就类似于计算前n阶楼梯的不同走法。
在C语言中,我们可以定义一个数组`ways`来存储每个位置上楼梯的不同方法数,其中`ways[n]`表示达到第n阶楼梯的不同方法数。初始状态,有0种方法到达第0阶(0步),1种方法到达第1阶(1步),2种方法到达第2阶(1步+1步或直接2步)。然后通过循环递推公式更新数组:
```c
#include <stdio.h>
int climbStairs(int n) {
int ways[n + 1]; // 初始化大小为n+1,包含0阶
ways[0] = 1; // 第0阶有一种方法(不需要爬)
ways[1] = 1; // 第1阶有两种方法(1步或0步)
for (int i = 2; i <= n; i++) {
ways[i] = ways[i - 1] + ways[i - 2] + ways[i - 3]; // 计算当前阶的方法数
}
return ways[n];
}
int main() {
int n;
printf("请输入阶梯层数:");
scanf("%d", &n);
int result = climbStairs(n);
printf("有 %d 种不同的方法爬到第%d阶楼顶。\n", result, n);
return 0;
}
```
阅读全文