Fork me on GitHub

爬楼问题

爬楼问题

题目描述:

在计算机学院有一个长腿君,他在爬楼梯的时候从来都是要么上 2 个台阶,要么上 3 个台阶。由于爬楼梯实在太无聊了,长腿君就开始尝试每天采用不同的方式上楼梯。如果长腿君回家需要爬 N 阶台阶,你能告诉长腿君,他爬楼梯回家有多少种不同的方式吗?

请注意,长腿君“先爬 3 个台阶后爬 2 个台阶”和“先爬 2 个台阶后爬 3 个台阶”是两种不同的回家方式。

输入格式:

每次输入一个符合描述的整数N,表示总共的台阶数(2 <= N <= 50)。

输出格式:

输出一行,输出一个整数,表示长腿君有多少种上楼的方式。最后结果保证在 int 范围内。

样例输入1:

5

样例输出1:

2

样例输入2:

40

样例输出2:

31572

 

代码:

#include <stdio.h>

int main() {
    int N;
    int step[51];
    
    scanf("%d", &N);
    
    step[0] = 0;
    step[1] = 0;
    step[2] = 1;
    step[3] = 1;
    
    int i;
    for(i=4;i<=N;i++)
    {
        // 第 i 步 可以走2个台阶和3个台阶两种走法,所以总共有 step[i-2] + step[i-3]种,然后再递归
step[i]
= step[i-2] + step[i-3]; } printf("%d", step[N]); return 0; }

 

posted @ 2020-10-12 20:50  小黑子杜  阅读(305)  评论(0编辑  收藏  举报