//算24
double a[5];//存四个数
#define EPS 1e-6
bool isZero(double x)
{//保证精度
return fabs(x)<= EPS;
}
bool count24(double a[],int n)
{
if(n==1)
{
if(isZero(a[0]-24))
return true;
else
return false;
}
double b[5];
for(int i=0;i<n-1;i++)//枚举连个数的组合
{
for(int j=i+1;j<n;j++)
{
int m = 0;//还剩下m个数 m=n-2;
for(int k=0;k<n;k++)
{//遍历这几个数
if(k!=i && k!=j)
b[m++] = a[k];
}
b[m] = a[i] + a[j];
if(count24(b,m+1))
return true;
b[m] = a[i] -a[j];
if(count24(b,m+1))
return true;
b[m] = a[i]*a[j];
if(count24(b,m+1))
return true;
if(!isZero(a[j]))
{
b[m] = a[i]/a[j];
if(count24(b,m+1))
return true;
}
if(!isZero(a[i]))
{
b[m] = a[j]/a[i];
if(count24(b,m+1))
return true;
}
}
}
return false;
}