1330 小青蛙跳台阶
作者:互联网
看题可知,这是一个排列组合问题,因此我们使用二维数组,算出跳2级台阶和跳1级台阶的数量即可算出答案
例如当总共台阶数为6时
跳1级台阶 | 跳2级台阶 |
6 | 0 |
4 | 1 |
2 | 2 |
0 | 3 |
把每种可能相加即可得到答案: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