#include <cstdio>
#include <iostream>
#include <cstring>
#include <math.h>
using namespace std;
double a[5];
bool f[5];
const double p=0.000001;
bool dfs(int x)//bool型容易判断有无方案
{
if(x==4)//第一个数钦定了,所以是选3个
{
for(int i=1;i<=4;i++)
if(!f[i]&&fabs(a[i]-24.0)<p)
return true;
return false;
}
for(int i=1;i<=4;i++){
if(!f[i])
for(int j=i+1;j<=4;j++)
if(!f[j]){
f[j] = true;
double t1=a[i],t2=a[j];
a[i]=t1+t2;
if(dfs(x+1)) return true;
a[i]=t1-t2;
if(dfs(x+1)) return true;
a[i]=t2-t1;
if(dfs(x+1)) return true;
a[i]=t1*t2;
if(dfs(x+1)) return true;
a[i]=t1/t2;
if(dfs(x+1)) return true;
a[i]=t2/t1;
if(dfs(x+1)) return true;
a[i]=t1;
f[j]=false;//选6种方案
}
}
return false;//没方案
}
int main()
{
while(1)
{
int k=0;
memset(f,0,sizeof(f));
for(int i=1;i<=4;i++)
{
scanf("%lf",&a[i]);
if(a[i]!=0) k=1;
}
if(k==0) return 0;
if(dfs(1)==1) printf("YES\n");
else printf("NO\n");
}
return 0;
}
算24
最新推荐文章于 2024-01-31 16:23:27 发布