basics 阶梯斐波那契数列

#include<stdio.h>
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值