题解 | 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")
360集团公司福利 438人发布