其他分享
首页 > 其他分享> > 1330 小青蛙跳台阶

1330 小青蛙跳台阶

作者:互联网

看题可知,这是一个排列组合问题,因此我们使用二维数组,算出跳2级台阶和跳1级台阶的数量即可算出答案

例如当总共台阶数为6时

跳1级台阶跳2级台阶
60
41
22
03

把每种可能相加即可得到答案:C06 + C15 + C24 + C03=13;但还需考虑到当 N 为最大值时,是否会超出类型范围。

#include <stdio.h>
#include <string.h>
#define LL long long 
int main()
{
    int T,n,m,p,q,k,a[100][2],count;
    LL i,j;
    scanf("%d",&T);
    while (T--)
    {
        scanf("%d",&n);
        memset(a,0,sizeof(a));
        k=0;
        a[k][0]=n;
        a[k][1]=0;
        while (a[k][0]>=0)
        {
            k++;
            a[k][0]=a[k-1][0]-2;
            a[k][1]=a[k-1][1]+1;
        }
        if (a[0][0]==0 && a[0][1]==0)
            printf("0\n");
        else
        {
            for (m=0,count=0;m<k;m++)
            {
                if (a[m][0]==0 || a[m][1]==0)
                    count++;
                else
                {
                    if (a[m][0]<a[m][1])
                        q=a[m][0];
                    else
                        q=a[m][1];
                    for (p=a[m][0]+a[m][1],i=1,j=1;q>0;p--,q--)
                    {
                        i*=p;
                        j*=q;
                        if (i%j==0)
                        {
                            i/=j;
                            j=1;
                        }
                    }
                    count+=(i/j);
                }
            }
            printf("%d\n",count);
        }
    }
    return 0; 
}

标签:count,台阶,--,scanf,1330,青蛙,int,while
来源: https://blog.csdn.net/Starshard666/article/details/120929569