C语言解决青蛙跳台阶问题(运用数学思想)

1.问题

题目:从前有一只青蛙他想跳台阶,有n级台阶,青蛙一次可以跳1级台阶,也可以跳2级台阶;
问:该青蛙跳到第n级台阶一共有多少种跳法。

2.代码

#include<stdio.h>
int main()
{
    int n = 0;
    scanf("%d", &n);//先设置变量,n级台阶
    printf("%d", JumpStep(n));
    return 0;
}
int JumpStep(unsigned int n)
{
    //转换成数学问题,拆分一共跳了多少次1阶与多少次2阶
    int i = 0;//跳了i次1阶
    int j = 0;//跳了j次2阶
              //要满足n=i+2j
    int count = 0;//计数
    for (i = 0; i <= n; i++)
    {
        for (j = 0; j <= n / 2; j++)
        {
            if (i + 2 * j == n)//找出所有情况下i与j的值
            {
                Kind(i, j);
                count += Kind(i, j);
            }
        }
    }
    return count;
}
int Kind(int i, int j)
{
    return N(i+j) / (N(i) * N(j));//排列组合,数学思想简单求解
}
int N(int n)//求n的阶乘,注意在这里n是会等于0的
{
    if (n >= 1)
        return n * N(n - 1);
    else if(n = 0)
        return 1;
}

3.总结

所用方法较为繁琐,代码较长,只是解决此类问题思路之一。

如果想要解决一个问题,先着手去写,想到一种思路先去表达出来,再慢慢优化、添加、改正,比如我代码中后面的注释就体现了我一步步思考的过程。

4.另一种优秀的思路(补充)

#include<stdio.h>
int Frog(unsigned int n)
{
    if (n == 1)
        return 1;
    else if (n == 2)
        return 2;
    else
        return Frog(n - 1) + Frog(n - 2);//循环进行跳1阶(剩n-1阶)与跳2阶(剩n-2阶)两种
                                         //剩的n-1(或者n-2)阶再进行跳1阶与跳2阶两种情况
                                         //如此跳下去直到剩下1阶或者2阶
                                         //剩下1阶只有1种跳法(跳1次1阶)
                                         //剩下2阶只有2种跳法(跳2次1阶与跳1次2阶)
}
//以上方法属于跳一下计一下,步步走战略,较为简洁
int main()
{
    int n = 0;
    scanf("%d", &n);
    printf("%d", Frog(n));
    return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值