/**
* 解法:假设4 个数的集合A={1,2,3,4},
* 先取前两个数进行不同的四则运算,1+2=3,1-2=-1,2-1=1,1/2=0.5,2/1=2,1x2=2,
* 将所得的结果递归的与集合A中剩下的进行四则运算,
* 问题规模从4个变成3个。。。最后变成2个。
* */
#include<iostream>
#include<string>
using namespace std;
const double threshold = 1e-6;
const int cardNumber = 4;
const int resultValue = 24;
double number[cardNumber];
string result[cardNumber];
bool pointsGame(int n){
if (n == 1){
if (fabs(number[0] - resultValue) < threshold){
cout << result[0] << endl;
return true;
}
else{
return false;
}
}
for (int i = 0; i < n; i++){
for (int j = i + 1; j < n; j++){
double a, b;
string expa, expb;
a = number[i];
b = number[j];
number[j] = number[n - 1];
expa = result[i];
expb = result[j];
result[j] = result[n - 1];
result[i] = '(' + expa +'+'+ expb + ')';
number[i] = a + b;
if (pointsGame(n - 1)){
return true;
}
result[i] = '(' + expa + '-' + expb + ')';
number[i] = a - b;
if (pointsGame(n - 1)){
return true;
}
result[i] = '(' + expb + '-' + expa + ')';
number[i] = b - a;
if (pointsGame(n - 1)){
return true;
}
result[i] = '(' + expa + '*' + expb + ')';
number[i] = a * b;
if (pointsGame(n - 1)){
return true;
}
if (b){
result[i] = '(' + expa + '/' + expb + ')';
number[i] = a / b;
if (pointsGame(n - 1)){
return true;
}
}
if (a){
result[i] = '(' + expb + '/' + expa + ')';
number[i] = b / a;
if (pointsGame(n - 1)){
return true;
}
}
number[i] = a;
number[j] = b;
result[i] = expa;
result[j] = expb;
}
}
return false;//
}
int main(){
int x;
for (int i = 0; i < cardNumber; i++){
char buffer[20];
cin >> x;
number[i] = x;
_itoa(x, buffer, 10);
result[i] = buffer;
}
if (pointsGame(cardNumber)){
cout << "success" << endl;
}
else{
cout << "fail" << endl;
}
return 0;
}