题目
分析
本题目本质上是穷举法
代码
#include<iostream>
#include<cmath>
using namespace std;
bool function(float* number, int n){
if(n==1){if(abs(*number-24)<1e-6) return true;}
else{
float temp[n-1];
int ptr;
bool flag;
for(int cnt1=0; cnt1<n; cnt1++) for(int cnt2=0; cnt2<n; cnt2++){
if(cnt1 != cnt2){
for(int op=0; op<4; op++){
flag = true;
ptr = 0;
switch(op){
case 0: temp[ptr++] = number[cnt1]+number[cnt2];break;
case 1: temp[ptr++] = number[cnt1]-number[cnt2];break;
case 2: temp[ptr++] = number[cnt1]*number[cnt2];break;
case 3: if(abs(number[cnt2]) >1e-6) temp[ptr++] = number[cnt1]/number[cnt2];
else flag=false;break;
}
if(flag){
for(int cnt3=0; cnt3<n; cnt3++) if(!(cnt3==cnt1||cnt3==cnt2)) temp[cnt3]=number[ptr++];
if(function(temp,n-1)) return true;
}
}
}
}
}
return false;
}
int main(){
float number[4];
for(int cnt=0; cnt<4; cnt++) cin >> number[cnt];
if(function(number,4)) cout << "Yes";
else cout << "No";
return 0;
}