int main()
{
int N,M,f[41]={0,1,1},i,t;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
scanf("%d",&M);
for(t=3;t<=M;t++)
{
f[t]=f[t-1]+f[t-2];
}
printf("%d\n",f[M]);
}
return 0;
}
这题对于每一层阶梯的方法是属于斐波那契数列,用排列组合做好像不行,有待商讨。
数组的每一编号表示第几层,此时不能从第一级而开始看,认为到第一级的方法为0(已经在第一级),应从第二级开始看,你会发现从第一级到第二级的方法为一第0级到第二级的方法为0,应为不在第0层而在第1层,所以f[0]=0,f[1]=0,而f[2]应由递推关系f[t]=f[t-1]+f[t-]推出为0+1=1;递推关系表示从下两级到本层通过一个两层一次到本层和从下一级到本层通过一步一次到本层,即相当于到t-1级的方法加上t-2的方法。
好好练递推!!!
付排列组合的代码,下回解决这个问题
#include<stdio.h>
int main()
{
int N,M,c,i,g,j,f,a,b,C,y,x,d;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
scanf("%d",&M);
M-=1;
c=M/2;d=M%2;
for(f=j=1;j<=c;j++)
{
for(x=g=a=b=1,y=c;g<=j;g++)
{
a=a*y;y--;
b=b*x;x++;
}
C=a/b;
if(d==1)C=C*(c+1);
f=f+C;
}
printf("%d\n",f);
}
return 0;
}