您的位置:首页 > 其它

HDU-ACM-2041

2016-02-15 00:17 344 查看
递归方法:(会超时,仅供参考)
#include<iostream>
#include<cstdio>
using namespace std;
void jie(int i);
int M,sum=0;
int main()
{
int N;
while(scanf("%d",&N)!=EOF)
{
int i;
for(i=1;i<=N;i++)
{
scanf("%d",&M);
jie(1);
jie(2);
printf("%d\n",sum);
sum=0;
}
}

return 0;

}

void jie(int i)
{
if(i==M-1){sum++;return;}
if(i>M-1){return ;}
jie(i+1);
jie(i+2);
return;
}

非递归:
#include<iostream>
#include<cstdio>
using namespace std;
double jie(double n);//用longlongint依然会蹦,40的阶乘过于大
int main()
{
int N;
while(scanf("%d",&N)!=EOF)
{
double M;int i;
for(i=1;i<=N;i++)
{
scanf("%lf",&M);
double m=M,n=M/2;
double p,q,sum=0;
for(p=0;p<=m;p++)
{
for(q=0;q<=n;q++)
{
if(p+2*q+1==M)
{
if(p==0||q==0){sum=sum+1.0;}
else{sum=sum+(jie(p+q))/(jie(p)*jie(q));}
}
}
}
printf("%.0lf\n",sum);
}

}
return 0;

}
double jie(double n)
{
double sum=1,i=1;
for(i=1.0;i<=n;i++)
{
sum=sum*i;
}

return sum;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: