超级台阶

来源:互联网 发布:淘宝限时抢购怎么弄 编辑:程序博客网 时间:2024/05/01 11:31
/*Problem Description有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? Input输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。 Output对于每个测试实例,请输出不同走法的数量 Sample Input223 Sample Output12*/#include <stdio.h>/*int  fun(int i){if(i==1||i==2){return i-1;}elsereturn fun(i-1)+fun(i-2);}用递归时会超时*///该题注意,题目中已经告诉说在第一阶梯上 int main(){int n,m;int sum[45];scanf("%d",&n);while(n--){scanf("%d",&m);sum[1]=0;sum[2]=1;sum[3]=2;for(int i=4;i<=m;i++){sum[i]=sum[i-1]+sum[i-2]; }        printf("%d\n",sum[m]);}return 0;}/*1.有8阶台阶,小明从下向上走,若每次只能跨过1级或2级,他走上去共有多少种方法?解:因为1阶台阶,1种走法;2阶台阶,有1+1、2,共2种走法;3阶台阶,有1+1+1、1+2、2+1,共3种走法,即1+2=3;4阶台阶,有1+1+1+1、1+1+2、1+2+1、2+1+1、2+2,共5种走法,即2+3=5;5阶台阶,有1+1+1+1+1、1+1+1+2、1+1+2+1、1+2+1+1、2+1+1+1、1+2+2、2+1+2、2+2+1,共8种走法3+5=8;……所以6阶台阶,有5+8=13种;7阶台阶,有8+13=21种;8阶台阶,有13+21=34种;结论:有n阶台阶,从下向上走,若每次只能跨过1级或2级,走法的规律为1,2,3,5,8,13,21……,即a1=1,a2=2,an=an-1+an-22.有10阶台阶,小明从下向上走,若每次只能跨过1级或2级或3级,他走上去共有多少种方法?解:因为1阶台阶,1种走法;2阶台阶,有1+1、2,共2种走法;3阶台阶,有1+1+1、1+2、2+1、3,共4种走法;4阶台阶,有1+1+1+1、1+1+2、1+2+1、2+1+1、2+2、1+3、3+1,共7种走法,即1+2+4=7;5阶台阶,有1+1+1+1+1、1+1+1+2、1+1+2+1、1+2+1+1、2+1+1+1、1+2+2、2+1+2、2+2+1、1+1+3、1+3+1、3+1+1、2+3、3+2,共13种走法2+4+7=13;……所以6阶台阶,有4+7+13=24种;7阶台阶,有7+13+24=44种;8阶台阶,有13+24+44=81种;9阶台阶,有24+44+81=149种;10阶台阶,有44+81+149=274种.结论:有n阶台阶,从下向上走,若每次只能跨过1级或2级或3级,走法的规律为1,2,4,7,13,24,44,……,即a1=1,a2=2,a3=4,an=an-1+an-2+a*/ 

0 0
原创粉丝点击