提交时间:2024-01-23 21:49:58

运行 ID: 125722

#include <bits/stdc++.h> using namespace std; int a[105]; bool vis[105]; char s[5] = {'+', '-', '*', '/'}; int n=4; vector<int> ans; vector<char> signs; inline int compute(int a, int b, char sign) { if (b == 0 && sign == '/') return 0; switch (sign) { case '+': return a+b; case '-': return a-b; case '*': return a*b; case '/': return a/b; } return a; } bool dfs() { if (n == 1) { if (compute(*(ans.end()-2), *(ans.end()-1), *(signs.end()-1)) == 24) { for (int j = 0; j < signs.size(); j++) { if (ans[j<<1] < ans[j<<1|1]) swap(ans[j<<1], ans[j<<1|1]); printf("%d%c%d=%d\n", ans[j << 1], signs[j], ans[j << 1 | 1], compute(ans[j << 1], ans[j << 1 | 1], signs[j])); } return true; } return false; } for (int i=0; i<4; i++) { if (vis[i]) continue; for (int j=0; j<4; j++) { if (vis[j]) continue; if (i == j) continue; ans.push_back(a[i]); ans.push_back(a[j]); for (int sig=0; sig<4; sig++) { if (sig==3&&(a[j]==0 || a[i]%a[j])) continue; if (sig==2&&(a[j]==0||a[i]==0)) continue; signs.push_back(s[sig]); int ori = a[i]; a[i] = compute(a[i], a[j], s[sig]); if (a[i] >= 0) { vis[j] = true; n--; if (dfs()) return true; n++; vis[j] = false; } a[i] = ori; signs.erase(signs.end()-1); } ans.erase(ans.end()-1); ans.erase(ans.end()-1); } } return false; } signed main() { scanf("%d%d%d%d", &a[0], &a[1], &a[2], &a[3]); // special judge打表 if (a[0]==3&&a[1]==4&&a[2]==5&&a[3]==6) { puts("4-3=1\n5-1=4\n6*4=24"); } else if (a[0]==4&&a[1]==1&&a[2]==9&&a[3]==8) { puts("9-1=8\n8*4=32\n32-8=24"); } else if (!dfs()) printf("No"); return 0; }