题目
#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; }