}
}
voidcalculate(floata,floatb,floatc,floatd)//进行加、减、乘、除运算
{
inti,j,k;
floatsum1,sum2,sum3;//储存3次两两运算的结果
for(i=0;i<4;i++)//"+-*/"4个运算符号选3个,有4*4*4=64种
for(j=0;j<6;j++)//3种运算符排列有3!
=6种
for(k=0;k<6;k++)
{
if((!
(i==3&&b==0))&&(!
(j==3&&c==0))&&(!
(k==3&&d==0)))//括号的类型为(())
//3为做除法运算的标志,除数为0时,跳过
{
sum1=arithmetic(i,a,b);//a,b做以i为标志的运算,然后把值赋给sum1
sum2=arithmetic(j,sum1,c);//sum1,c做以j为标志的运算,然后把值赋给sum2
sum3=arithmetic(k,sum2,d);//sum2,d做以k为标志的运算,然后把值赋给sum3
if(fabs(sum3-24)<0.001)//判断能否运算出24,出现小数时,能够包含在内
{
check++;//标志能运算出24
show(1,i,j,k,a,b,c,d);//输出运算出24的表达式
}
}
if(k==2)//()*()
{
sum1=arithmetic(i,a,b);//a,b做以i为标志的运算,然后把值赋给sum1
sum2=arithmetic(j,c,d);//sum1,c做以j为标志的运算,然后把值赋给sum2
sum3=sum1*sum2;
if(fabs(sum3-24)<0.001)//出现小数时,能够包含在内
{
check++;//标志能运算出24
show(2,i,j,k,a,b,c,d);//输出运算出24的表达式
}
}
if(k==3)//括号的类型为()()
{
sum1=arithmetic(i,a,b);//sum1,c做以j为标志的运算,然后把值赋给sum2
sum2=arithmetic(j,c,d);//sum1,c做以j为标志的运算,然后把值赋给sum2
if(sum2!
=0)
{
sum3=sum1/sum2;
if(fabs(sum3-24)<0.001)//出现小数时,能够包含在内
{
check++;//标志能运算出24
show(3,i,j,k,a,b,c,d);//输出运算出24的表达式
}
}
}
}
}
voidmain()
{
inti,j,k,l,m=0;
floata[4];//储存所输入的4个整数
while(m==0)
{
m=1;
cout<<"请输入4个1--13的整数:
"<for(i=0;i<4;i++)
{
cin>>a[i];
if(a[i]<1||a[i]>13||a[i]!
=int(a[i]))//判断是否为符合要求的整数
{
if(m!
=0)
{
cout<<"输入错误,请重新输入!
"<}
m=0;
}
}
}
for(i=0;i<4;i++)//4的排列4!
=24,每中情况调用calculate
for(j=0;j<4;j++)
if(j!
=i)//第2数和第1个数不能重复
for(k=0;k<4;k++)
if(k!
=j&&k!
=i)//第3数和第1,2个数不能重复
for(l=0;l<4;l++)
if(l!
=i&&l!
=j&&l!
=k)//第4数和第1,2,3个数不能重复
{
calculate(a[i],a[j],a[k],a[l]);//调用calculate函数,进行进行加、减、乘、除运算
}
if(check==0)//不能运算出24
{cout<<"你所输入的数,经过四则运算后,不等于24点"<}