爆搜,但是不会……
dfs(num[],n)表示在一个长度为n的数组里任选两个数分别做加减乘除操作,当n等于1的时候判断num[0]是否为24.
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
double num[10];
bool dfs(double num[],int n)
{
if(n==1) return fabs(num[0]-24)<1e-8;
int i,j,k;
double tem[10];
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
if(i==j) continue;
int len=0;
for(k=0;k<n;k++)
{
if(k!=i&&k!=j)
{
tem[len++]=num[k];
}
}
tem[len]=num[i]+num[j];
if(dfs(tem,n-1)) return true;
tem[len]=num[i]*num[j];
if(dfs(tem,n-1)) return true;
tem[len]=num[i]-num[j];
if(dfs(tem,n-1)) return true;
tem[len]=num[j]-num[i];
if(dfs(tem,n-1)) return true;
if(num[i]!=0)
{
tem[len]=num[j]/num[i];
if(dfs(tem,n-1)) return true;
}
if(num[j]!=0)
{
tem[len]=num[i]/num[j];
if(dfs(tem,n-1)) return true;
}
}
}
return false;
}
int main()
{
while(cin>>num[0]>>num[1]>>num[2]>>num[3])
{
if(dfs(num,4))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}