我写了个程序算了下,结果是57840480000种,我把程序贴出来,大家帮忙看看逻辑上有没错误?
用duizhen函数对顶楼的duizhen(1,2,2,0)情况运算结果也为26。
double duizhen(double x1,double x2,double x3,int flag);
main()
{
double number;
number=3*25*duizhen(5,5,5,0); /*三国出场顺序有3种,首轮对手选择方式有25种。*/
printf("%lf",number);
getch();
}
double duizhen(double x1,double x2,double x3,int flag) /*flag=0表示1,2对阵,flag=1表示1,3对阵,flag=2表示2,3对阵*/
{
double num=1;
if(x1>0&&x2>0&&x3>0)
{
if(flag==0)
{
num=x3*(duizhen(x1,x2-1,x3,1)+duizhen(x1-1,x2,x3,2));
}
else if(flag==1)
{
num=x2*(duizhen(x1,x2,x3-1,0)+duizhen(x1-1,x2,x3,2));
}
else if(flag==2)
{
num=x1*(duizhen(x1,x2,x3-1,0)+duizhen(x1,x2-1,x3,1));
}
}
else if(x1==0&&x2>0&&x3>0)
{
if(x2>1&&x3>1)
{
num=(x2-1)*duizhen(x1,x2-1,x3,0)+(x3-1)*duizhen(x1,x2,x3-1,0);
}
else if(x2==1&&x3>1)
{
num=1+(x3-1)*duizhen(x1,x2,x3-1,0);
}
else if(x3==1&&x2>1)
{
num=1+(x2-1)*duizhen(x1,x2-1,x3,0);
}
else if(x3==1&&x2==1)
{
num=2;
}
}
else if(x2==0&&x1>0&&x3>0)
{
if(x1>1&&x3>1)
{
num=(x1-1)*duizhen(x1-1,x2,x3,0)+(x3-1)*duizhen(x1-1,x2,x3,0);
}
else if(x1==1&&x3>1)
{
num=1+(x3-1)*duizhen(x1,x2,x3-1,0);
}
else if(x3==1&&x1>1)
{
num=1+(x1-1)*duizhen(x1-1,x2,x3,0);
}
else if(x1==1&&x3==1)
{
num=2;
}
}
else if(x3==0&&x1>0&&x2>0)
{
if(x1>1&&x2>1)
{
num=(x1-1)*duizhen(x1-1,x2,x3,0)+(x2-1)*duizhen(x1,x2-1,x3,0);
}
else if(x1==1&&x2>1)
{
num=1+(x2-1)*duizhen(x1,x2-1,x3,0);
}
else if(x2==1&&x1>1)
{
num=1+(x1-1)*duizhen(x1-1,x2,x3,0);
}
else if(x1==1&&x2==1)
{
num=2;
}
}
return num;
}
[ 本帖最后由 风精之羽 于 2008-4-13 16:41 编辑 ]
|