题解 | #24点运算#
24点运算
https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d
#include <iostream>
#include <limits>
#include <ostream>
#include <string>
#include <unordered_map>
#include <sstream>
#include <vector>
#include <deque>
using namespace std;
bool back_tracking(vector<int>& vec, vector<string>& vec_s, int n, vector<bool>& vec_b, int sum, string res ) {
if(n == 0) {
if(sum == 24) {
cout << res <<endl;
return true;
}else return false;
}
// cout << n <<" "<< res << " "<< sum<<endl;
for(int i = 0; i < vec.size(); i++) {
if(n == 4) {
vec_b[i] = true;
int num = vec[i];
string s = vec_s[i];
back_tracking(vec, vec_s, 3, vec_b, num, s);
vec_b[i] = false;
}
else {
if(vec_b[i]) continue;
for(int j = 0; j < 4; j++) {
if(j == 0) {
int num = sum + vec[i];
string s = res + '+' + vec_s[i];
vec_b[i] = true;
if(back_tracking(vec, vec_s, n - 1, vec_b, num, s)) return true;
vec_b[i] = false;
}else if(j == 1) {
int num = sum - vec[i];
string s = res + '-' + vec_s[i];
vec_b[i] = true;
if(back_tracking(vec, vec_s, n - 1, vec_b, num, s)) return true;
vec_b[i] = false;
}else if(j == 2) {
int num = sum * vec[i];
string s = res + '*' + vec_s[i];
vec_b[i] = true;
if(back_tracking(vec, vec_s, n - 1, vec_b, num, s)) return true;
vec_b[i] = false;
}else {
int num = sum / vec[i];
string s = res + '/' + vec_s[i];
vec_b[i] = true;
if(back_tracking(vec, vec_s, n - 1, vec_b, num, s)) return true;
vec_b[i] = false;
}
}
}
}
return false;
}
int main() {
string str;
unordered_map<string, int> map = {{"A", 1},{"2",2},{"3",3},{"4",4},{"5",5},{"6",6},{"7",7},
{"8",8},{"9",9},{"10",10},{"J",11},{"Q",12},{"K",13}};
while (getline(cin, str)) { // 注意 while 处理多个 case
stringstream ss(str);
string tmp;
vector<int> vec;
vector<string> vec_s;
vector<bool> vec_b(4, false);
while(getline(ss, tmp, ' ')) {
if(map[tmp] == 0) {
cout <<"ERROR"<<endl;
return 0;
}
vec.push_back(map[tmp]);
vec_s.push_back(tmp);
}
string res = "";
int sum = 0;
if(back_tracking(vec, vec_s, 4,vec_b, sum, res)) {
cout << res <<endl;
}
else cout <<"NONE"<<endl;
}
}
// 64 位输出请用 printf("%lld")
腾讯成长空间 1121人发布
查看14道真题和解析