直接看代码吧,写得搞清楚了,so easy
#include
#include
using namespace std;
double a[4];
int search(int n){
if(n==1){ //判断是否为24点
if(fabs(a[0]-24.0)<0.0000001)
return 1;
return 0;
}
for(int i=0;i<4;i++) //4个数里取两个进行加减乘除,再递归计算剩下的3,2知道剩下一个时判断是否为24点
for(int j=i+1;j<4;j++){
double x,y;
x=a[i]; y=a[j];
a[j]=a[n-1];
a[i]=x+y;
if(search(n-1))
return 1;
a[i]=x-y;
if(search(n-1))
return 1;
a[i]=y-x;
if(search(n-1))
return 1;
a[i]=x*y;
if(search(n-1))
return 1;
if(y){
a[i]=x/y;
if(search(n-1))
return 1;
}
if(x){
a[i]=x/y;
if(search(n-1))
return 1;
}
a[i]=x;
a[j]=y;
}
return 0;
}
int main(){
int T;
cin>>T;
while(T--){
for(int i=0;i<4;i++) //1<=a[i]<=13
cin>>a[i];
if(search(4))
cout<
else
cout<
}
return 0;
}