二十四点计算(+,-,*,/)
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
const int maxn = 1005 + 10;
int n, m;
int a[10], vis[10];
string t[10];
const int ans = 24;
int lst = 0;
int path[4][3];
int flag = 0;
void dfs(int k, vector<int> v) {
if (flag) return;
if (k == 4) {
if (v[0] != ans) return;
for (int i = 1; i < k; i++) {
cout << path[i][0] << ' ';
if (path[i][2] == 1) cout << '+' << ' ';
else if (path[i][2] == 2) cout << '-' << ' ';
else if(path[i][2] == 3) cout << '/' << ' ';
else cout << '*' << ' ';
cout << path[i][1] << endl;
}
cout << "I get it!" << endl;
flag = 1;
return;
}
int ta, tb;
for (int i = 0; i < v.size(); i++) {
for (int j = 0; j < v.size(); j++) {
if (i != j) {
vector<int> g;
for(int l = 0; l < v.size(); l++) {
if (l != i && l != j) g.pb(v[l]);
}
ta = v[i], tb = v[j];
g.pb(ta + tb);
path[k][0] = ta;
path[k][1] = tb;
path[k][2] = 1;
dfs(k + 1, g);
g.pop_back();
if (ta > tb) {
path[k][2] = 2;
g.pb(ta - tb);
dfs(k + 1, g);
g.pop_back();
}
if (ta % tb == 0) {
path[k][2] = 3;
g.pb(ta / tb);
dfs(k + 1, g);
g.pop_back();
}
path[k][2] = 4;
g.pb(ta * tb);
dfs(k + 1, g);
g.pop_back();
}
}
}
}
void solve() {
flag = 0;
vector<int> v;
for (int i = 1; i <= 4; i++) {
v.push_back(a[i]);
}
dfs(1, v);
if (!flag) cout << "No solution" << endl;
cout << "----------------------------" << endl;
}
signed main() {
#ifdef LOCAL
#endif
ios::sync_with_stdio(false);
cin.tie(0);
while(cin >> a[1] >> a[2] >> a[3] >> a[4]) solve();
return 0;
}