青蛙跳台阶(C语言数学排列组合公式求解法)
题目:从前有一只青蛙他想跳台阶,有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; }
运行结果:
欢迎提出错误