-
题目描述:
-
N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式.
输入:
-
输入包括一个整数N,(1<=N<90)。
输出:
-
可能有多组测试数据,对于每组数据,
输出当楼梯阶数是N时的上楼方式个数。
样例输入:
4
样例输出
5
本题运用大数加法和非波那契树列
# include <stdio.h>
int qingchu (int a[])
{
int q=0,i;
for(i=0;i<204;i++)
{
if(a[i]==0)
{
q++;
}
if(a[i]!=0)
break;
}
return q;
}
void jiafa (int c[][205])
{
int k=0,i,m=2;
c[1][204]=1;
c[0][204]=1;
while(m!=200)
{
for(i=204;i>=0;i--)
{
c[m][i]=c[m-1][i]+c[m-2][i]+k;
k=c[m][i]/10;
c[m][i]=c[m][i]%10;
}
m++;
}
}
void palouti (int n)
{
int i,c[205][205]={0};
int a[205]={0},m[205]={0},b[205]={0},r;
jiafa(c);
for(i=0;i<205;i++)
{
m[i]=c[n][i];
}
r=qingchu(m);
for(i=r;i<205;i++)
{
printf("%d",m[i]);
}
printf("\n");
}
int main()
{
int n,c[205][205]={0};
int m;
while(scanf("%d",&n)!=EOF)
{
palouti(n);
}
return 0;
}