题解 | 24点运算
24点运算
https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d
#include <iostream> #include <vector> #include <cstring> using namespace std; #include <map> int calRes(char c, int a, int b) { switch (c) { case '/': return a / b; case '+': return a + b; case '-': return a - b; case '*': return a * b; default: return -1; break; } return 0; }; char rep(int n, map<int, char>mm) { if (n >= 2 && n <= 10) return n + '0'; else return mm[n]; } int main() { string s; char c; vector<int> vv; string ss = "+-*/"; map<int, char>mm; mm[1] = 'A'; mm[11] = 'J'; mm[12] = 'Q'; mm[13] = 'K'; // cout << ss[3] << endl; int res = 0; while (cin >> s) { // 注意 while 处理多个 case if (s.size() > 3) { cout << "ERROR"; return 0; } if (s == "10") { vv.push_back(10); } c = s[0]; if (c >= '0' && c <= '9')vv.push_back(c - '0'); else if (c == 'A') vv.push_back(1); else if (c == 'J') vv.push_back(11); else if (c == 'Q') vv.push_back(12); else if (c == 'K') vv.push_back(13); } for (int i = 0; i < ss.size(); i++) { for (int j = 0; j < ss.size(); j++) { for (int k = 0; k < ss.size(); k++) { for (int l =0; l <vv.size();l++){ for(int m=0;m<vv.size();m++){ for(int o=0;o<vv.size();o++){ for(int r=0;r<vv.size();r++){ if(l==m || l==o || l==r || m ==o || m == r || o==r) continue; res = calRes(ss[i], vv[l], vv[m]); res = calRes(ss[j], res, vv[o]); res = calRes(ss[k], res, vv[r]); if (res == 24) { cout << rep(vv[l], mm) << ss[i] << rep(vv[m], mm) << ss[j] << rep(vv[o], mm) << ss[k] << rep(vv[r], mm) << endl; //return 0; } } } } } } } } cout << "NONE"; return 0; } // 64 位输出请用 printf("%lld")