第四届蓝桥杯C++B组 第39级台阶

第四届蓝桥杯C++B组 第39级台阶
描述

小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!

站在台阶前,他突然又想着一个问题:

如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?

请你利用计算机的优势,帮助小明寻找答案。

要求提交的是一个整数。

注意:不要提交解答过程,或其它的辅助说明文字。
这个问题我们可以通过动态规划来解决
首先我们不考虑左右脚 1阶时候1种走法 2阶的时候2种
所以我们得出的规律是f[n]=f[n-1]+f[n-2]n>=3;
我们再来考虑左右脚,当台阶数是偶数时候 种类是(f[n]/2 )-1奇数则是(f[n]/2 +1
通过规律来求解。

我们还可以通过递归来做

#include<cstdio>
#include <iostream>
using namespace std;
int sum;
void dfs(int n,int k)//k为走的步数。、、n为台阶数
{
    if(n>39) return;//结束条件
    if(n==39&&k%2==0)//j结束条件
    {
        sum++;
        return;
    }
    dfs(n+1,k+1);//寻找
    dfs(n+2,k+1);
}
int main()
{
    sum=0;
    dfs(0,0);
    cout<<sum<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43352073/article/details/86833519