题意规定m=1是为0,m=2时为1,m=3时为2;
这时候我们可以这样想,假如台阶数为k,那么有多少种呢?这时候我们可以想到当为k时比k-1多了一个台阶,k可以等于(这种说法不恰当 ,理解就行 不是等于,下同)k-1的数目,因为最后相当于在k-1的基础上再上一步。
由于可以同时上两步,我们又考虑到了k-2,k比k-2多了2个台阶,k又等于(上同)k-2的数目,因为最后相当于在k-2的基础上再上两步。
所以经过终结m(k)=m(k-1)+m(k-2);
#include <stdio.h> int main() { int t,n,a[45]; a[1]=0,a[2]=1,a[3]=2; for(int i=4;i<=40;i++) a[i]=a[i-1]+a[i-2]; scanf("%d",&t); while(t--) { scanf("%d",&n); printf("%d\n",a[n]); } return 0; }
原文地址:http://blog.csdn.net/su20145104009/article/details/45028899