题解 | #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")