有效降低时间,增加效率
//小石头的存钱罐#include "stdio.h"
int count(int n,int plus,int minu,int half)
{
int sum=1;
if(n==1)
return 1;
if(plus>=half)
return 1;
else if(plus>minu)
sum*=(count(n-1,plus,minu+1,half)+count(n-1,plus+1,minu,half));
else
sum*=count(n-1,plus+1,minu,half);
return sum;
}
int main()
{
int total,n,plus,minu,half,sum;
scanf("%d",&total);
for(int i=0;i<total;i++)
{
scanf("%d",&n);
half=n/2;
plus=1;
minu=0;
sum=count(n-1,plus,minu,half);
printf("Case #%d: %d\n",i+1,sum);
}
return 0;
}
原题:小石头有一个存钱罐和很多很多个硬币(可以理解为无限多),某个无聊的周末,他决定玩一个小游戏。游戏有n个操作,将一个硬币放入罐子或者将一个硬币取出罐子。罐子最开始是空的,要求完成这n个操作的时候罐子也是空的。求有多少种不同的操作序列。