青蛙跳台阶(C语言数学排列组合公式求解法)

发布时间 2023-10-18 18:40:20作者: 不再遇见你

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


当只有跳一级台阶的方法跳时,总共跳n步,共有1次跳法                                

当用了一次跳二级台阶的方法跳时,总共跳n-1步,共有n-1次跳法     

当用了两次跳二级台阶的方法跳时,总共跳n-2步,共有((n-2)*(n-3))/(2*1)种跳法

当用了三次跳二级台阶的方法跳时,总共跳n-3步,共有((n-2)*(n-3)*(n-4))/(3*2*1)种跳法

代码:

#include <stdio.h>
int Fac(int n)//求n的阶乘函数
{
    int ret = 1;
    for (int i = 1; i <= n; i++)
    {
        ret *= i;
    }
    return ret;
}
int C_n_i(int n, int i)//求排列组合函数
{
    if (i == 0||i==n)
    {
        return 1;
    }
    else
    {
        return Fac(n) / (Fac(i) * Fac(n - i));
    }
}
int main()
{
    //青蛙跳台阶问题
    //数学的排序问题
    //不用递归的解法
    int n;
    scanf("%d", &n);
    int sum = 0;
    for (int i = 0; i <= n / 2; i++)
    {
        sum += C_n_i(n-i,i);
    }
    printf("%d", sum);
    return 0;
}

运行结果:

欢迎提出错误