#include<iostream>
using namespace std;
void solve(int, int, int, int );
bool calculation(int, int, int, int );
int maket(int, int, char );
int main()
{
int a, b, c, d;
cout << "24点游戏" << endl;
cout << "请输入4个数字:";
cin >> a >> b >> c >> d;
solve(a, b, c, d);
}
void solve(int a, int b, int c, int d)
{
int i, j, k, l, M[4];
bool P=false,Q;
M[0] = a;
M[1] = b;
M[2] = c;
M[3] = d;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
for (k = 0; k < 4; k++)
{
for (l = 0; l < 4; l++)
{
if (i != k && i != j && i != l && j != k && j != l
&& k != l)
Q= calculation(M[i], M[j], M[k], M[l]);
if (Q==true)P=Q;
}
}
}
}
if (P==false)
cout<<"无解";
}
bool calculation(int a, int b, int c, int d)
{
int p[4], i, j, k, result1, result2, final = 0;
p[0] = a;
p[1] = b;
p[2] = c;
p[3] = d;
bool o = false;
char s[4] = { '+', '-', '*', '/' };
for (i = 0; i < 4; i++)
{
if (final == 24)
{
break;
}
if (i == 3 && (p[0] % p[1] != 0))
{
continue;
}
result1 = maket(p[0], p[1], s[i]);
for (j = 0; j < 4; j++)
{
if (final == 24)
break;
if (j == 3 && (result1 % p[2] != 0))
continue;
result2 = maket(result1, p[2], s[j]);
for (k = 0; k < 4; k++)
{
if (k == 3 && (result2 % p[3]) != 0)
continue;
final = maket(result2, p[3], s[k]);
if (final == 24)
{
cout << '(' << '(' << p[0] << s[i] << p[1] << ')' << s[j]
<< p[2] << ')' << s[k] << p[3];
cout << "=24"<<endl;
o = true;
break;
}
}
}
}
for (i = 0; i < 4; i++)
{
if (final == 24)
break;
if (i == 3 && (p[0] % p[1] != 0))
continue;
result1 = maket(p[0], p[1], s[i]);
for (j = 0; j < 4; j++)
{
if (final == 24)
break;
if (j == 3 && (p[2] % p[3] != 0))
continue;
result2 = maket(p[2], p[3], s[j]);
for (k = 0; k < 4; k++)
{
if (k == 3 && (result1 % result2) != 0)
continue;
final = maket(result1, result2, s[k]);
if (final == 24)
{
cout << '(' << p[0] << s[i] << p[1] << ')' << s[k] << '('
<< p[2] << s[j] << p[3] << ')';
cout << "=24"<<endl;
o = true;
break;
}
}
}
}
for (i = 0; i < 4; i++)
{
if (final == 24)
{
break;
}
if (i == 3 && (p[1] % p[2] != 0))
{
continue;
}
result1 = maket(p[1], p[2], s[i]);
for (j = 0; j < 4; j++)
{
if (final == 24)
break;
if (j == 3 && (p[0]%result1 != 0))
continue;
result2 = maket(p[0],result1, s[j]);
for (k = 0; k < 4; k++)
{
if (k == 3 && (result2 % p[3]) != 0)
continue;
final = maket(result2, p[3], s[k]);
if (final == 24)
{
cout << '(' << p[0] << s[j] <<'('<< p[1] << s[i]
<< p[2] <<')'<< ')' << s[k] << p[3];
cout << "=24"<<endl;
o = true;
break;
}
}
}
}
for (i = 0; i < 4; i++)
{
if (final == 24)
{
break;
}
if (i == 3 && (p[1] % p[2] != 0))
{
continue;
}
result1 = maket(p[1], p[2], s[i]);
for (j = 0; j < 4; j++)
{
if (final == 24)
break;
if (j == 3 && (result1 % p[3] != 0))
continue;
result2 = maket(result1, p[3], s[j]);
for (k = 0; k < 4; k++)
{
if (k == 3 && (p[0]%result2) != 0)
continue;
final = maket(p[0],result2,s[k]);
if (final == 24)
{
cout << p[0] << s[k] << '('<<'('<<p[1] << s[i]
<< p[2] << ')' << s[j] << p[3]<<')';
cout << "=24"<<endl;
o = true;
break;
}
}
}
}
for (i = 0; i < 4; i++)
{
if (final == 24)
{
break;
}
if (i == 3 && (p[2] % p[3] != 0))
{
continue;
}
result1 = maket(p[2], p[3], s[i]);
for (j = 0; j < 4; j++)
{
if (final == 24)
break;
if (j == 3 && (p[1]%result1!= 0))
continue;
result2 = maket(p[1],result1, s[j]);
for (k = 0; k < 4; k++)
{
if (k == 3 && (p[0]%result2) != 0)
continue;
final = maket(p[0],result2, s[k]);
if (final == 24)
{
cout << p[0] << s[k] << '('<<p[1] << s[j]
<<'('<< p[2] << s[i] << p[3]<<')'<<')';
cout << "=24"<<endl;
o = true;
break;
}
}
}
}
return o;
}
int maket(int a, int b, char c)
{
switch (c)
{
case '+':
{
return (a + b);
break;
}
case '-':
{
return (a - b);
break;
}
case '*':
{
return (a * b);
break;
}
case '/':
{
return (a / b);
break;
}
default:
return 0;
}
}
//就是这样,各种出错,不明,求解。



using namespace std;
void solve(int, int, int, int );
bool calculation(int, int, int, int );
int maket(int, int, char );
int main()
{
int a, b, c, d;
cout << "24点游戏" << endl;
cout << "请输入4个数字:";
cin >> a >> b >> c >> d;
solve(a, b, c, d);
}
void solve(int a, int b, int c, int d)
{
int i, j, k, l, M[4];
bool P=false,Q;
M[0] = a;
M[1] = b;
M[2] = c;
M[3] = d;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
for (k = 0; k < 4; k++)
{
for (l = 0; l < 4; l++)
{
if (i != k && i != j && i != l && j != k && j != l
&& k != l)
Q= calculation(M[i], M[j], M[k], M[l]);
if (Q==true)P=Q;
}
}
}
}
if (P==false)
cout<<"无解";
}
bool calculation(int a, int b, int c, int d)
{
int p[4], i, j, k, result1, result2, final = 0;
p[0] = a;
p[1] = b;
p[2] = c;
p[3] = d;
bool o = false;
char s[4] = { '+', '-', '*', '/' };
for (i = 0; i < 4; i++)
{
if (final == 24)
{
break;
}
if (i == 3 && (p[0] % p[1] != 0))
{
continue;
}
result1 = maket(p[0], p[1], s[i]);
for (j = 0; j < 4; j++)
{
if (final == 24)
break;
if (j == 3 && (result1 % p[2] != 0))
continue;
result2 = maket(result1, p[2], s[j]);
for (k = 0; k < 4; k++)
{
if (k == 3 && (result2 % p[3]) != 0)
continue;
final = maket(result2, p[3], s[k]);
if (final == 24)
{
cout << '(' << '(' << p[0] << s[i] << p[1] << ')' << s[j]
<< p[2] << ')' << s[k] << p[3];
cout << "=24"<<endl;
o = true;
break;
}
}
}
}
for (i = 0; i < 4; i++)
{
if (final == 24)
break;
if (i == 3 && (p[0] % p[1] != 0))
continue;
result1 = maket(p[0], p[1], s[i]);
for (j = 0; j < 4; j++)
{
if (final == 24)
break;
if (j == 3 && (p[2] % p[3] != 0))
continue;
result2 = maket(p[2], p[3], s[j]);
for (k = 0; k < 4; k++)
{
if (k == 3 && (result1 % result2) != 0)
continue;
final = maket(result1, result2, s[k]);
if (final == 24)
{
cout << '(' << p[0] << s[i] << p[1] << ')' << s[k] << '('
<< p[2] << s[j] << p[3] << ')';
cout << "=24"<<endl;
o = true;
break;
}
}
}
}
for (i = 0; i < 4; i++)
{
if (final == 24)
{
break;
}
if (i == 3 && (p[1] % p[2] != 0))
{
continue;
}
result1 = maket(p[1], p[2], s[i]);
for (j = 0; j < 4; j++)
{
if (final == 24)
break;
if (j == 3 && (p[0]%result1 != 0))
continue;
result2 = maket(p[0],result1, s[j]);
for (k = 0; k < 4; k++)
{
if (k == 3 && (result2 % p[3]) != 0)
continue;
final = maket(result2, p[3], s[k]);
if (final == 24)
{
cout << '(' << p[0] << s[j] <<'('<< p[1] << s[i]
<< p[2] <<')'<< ')' << s[k] << p[3];
cout << "=24"<<endl;
o = true;
break;
}
}
}
}
for (i = 0; i < 4; i++)
{
if (final == 24)
{
break;
}
if (i == 3 && (p[1] % p[2] != 0))
{
continue;
}
result1 = maket(p[1], p[2], s[i]);
for (j = 0; j < 4; j++)
{
if (final == 24)
break;
if (j == 3 && (result1 % p[3] != 0))
continue;
result2 = maket(result1, p[3], s[j]);
for (k = 0; k < 4; k++)
{
if (k == 3 && (p[0]%result2) != 0)
continue;
final = maket(p[0],result2,s[k]);
if (final == 24)
{
cout << p[0] << s[k] << '('<<'('<<p[1] << s[i]
<< p[2] << ')' << s[j] << p[3]<<')';
cout << "=24"<<endl;
o = true;
break;
}
}
}
}
for (i = 0; i < 4; i++)
{
if (final == 24)
{
break;
}
if (i == 3 && (p[2] % p[3] != 0))
{
continue;
}
result1 = maket(p[2], p[3], s[i]);
for (j = 0; j < 4; j++)
{
if (final == 24)
break;
if (j == 3 && (p[1]%result1!= 0))
continue;
result2 = maket(p[1],result1, s[j]);
for (k = 0; k < 4; k++)
{
if (k == 3 && (p[0]%result2) != 0)
continue;
final = maket(p[0],result2, s[k]);
if (final == 24)
{
cout << p[0] << s[k] << '('<<p[1] << s[j]
<<'('<< p[2] << s[i] << p[3]<<')'<<')';
cout << "=24"<<endl;
o = true;
break;
}
}
}
}
return o;
}
int maket(int a, int b, char c)
{
switch (c)
{
case '+':
{
return (a + b);
break;
}
case '-':
{
return (a - b);
break;
}
case '*':
{
return (a * b);
break;
}
case '/':
{
return (a / b);
break;
}
default:
return 0;
}
}
//就是这样,各种出错,不明,求解。



豪哥