#include <bits/stdc++.h> #include #include #include #include #include #include #include #include #include <stdio.h> #include <math.h> using namespace std; enum{false,true}flag;
void expression(short k,doubleTemp){ double temp[4],a,b; int t; if(k==1){ if(fabs(Temp-24) < 1e-6) flag=true; }else{ for(int i1=0;i1<k;i1++){ for(int i2=0;i2<k;i2++){ if(i1==i2){ a=(Temp+i1); b=(Temp+i2); t=0; for(int j=0;j<k;j++){ if(j!=i1&&j!=i2) temp[t++]=(Temp+j); } for(int j=0;j<4;j++){ switch(j){ case 0: temp[t] = a+b; break; case 1: temp[t] = a-b; break; case 2: temp[t] = ab; break; case 3: if(fabs(b-0)>=1e-6) temp[t] = a/b; break; } expression(k-1,temp); if(flag) return; } } } } } } int main(){ double temp[4]; while(1){ for(int i=0;i<4;i++) scanf("%lf",&temp[i]); if(!temp[0]) break; flag=false; expression(4,temp); if(flag) printf("YES\n"); else printf("NO\n"); } }
共 2 条回复
避免访问相同元素:添加 continue 语句,避免进入相同的元素。
改正逻辑错误:每次调用 expression 函数时,确保 temp 数组中正确的元素传递。