題目:從前有一隻青蛙他想跳臺階,有n級臺階,青蛙一次可以跳1級臺階,也可以跳2級臺階;問:該青蛙跳到第n級臺階一共有多少種跳法。 當只有跳一級臺階的方法跳時,總共跳n步,共有1次跳法 當用了一次跳二級臺階的方法跳時,總共跳n-1步,共有n-1次跳法 當用了兩次跳二級臺階的方法跳時,總共跳n-2步,共 ...
題目:從前有一隻青蛙他想跳臺階,有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; }
運行結果:
歡迎提出錯誤