题意规定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;
}