一只青蛙一次能够跳上1级台阶,也能够跳上2级……它也能够跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。测试
输入可能包含多个测试样例,对于每一个测试案例,spa
输入包括一个整数n(1<=n<=50)。code
对应每一个测试案例,blog
输出该青蛙跳上一个n级的台阶总共有多少种跳法。io
6
32
这道题目跟以前的跳台阶大同小异,只是跳台阶的阶数从1变到了n,也就是说,再也不是跳一下或者跳两下的问题,而是跳n下的问题。那么解题的思路显然还得逆向分析,咱们发现:class
每一个最终台阶均可以一步跳上去,也能够从他的前一个台阶跳一下上去,也能够从他的前两个台阶跳两个台阶上去。那么总结发现:循环
最后剩下的台阶数,加上以前的跳台阶的方法,便可。即:方法
最后剩下零个台阶,暂且定为0,直接跳n个台阶上来,显然只有一种方法,咱们每次循环首先自加1就好了。总结
最后剩下1个台阶,那么共有(第n-1个台阶的方法数)种;di
最后剩下2个台阶,共有(第n-2个台阶的方法数)种;
....
最后剩下n-1个台阶,只有一种方法。
把上面的方法累加起来,既是跳到第n阶台阶的数目。
#include <stdio.h> long long int arr[51] = {0,1}; void createArr(void); int main(void){ int n; createArr(); while(scanf("%d",&n)!=EOF && n>=1 && n<=50){ printf("%lld\n",arr[n]); } return 0; } void createArr(void){ int i,j; for(i=2;i<51;i++){ j=i-1; arr[i]++;//直接跳跃到自己的 while(j){ arr[i] += arr[j]; j--; } } }