题解 | #24点运算#
24点运算
https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d
#include <iostream> #include <string> #include <unordered_map> #include <vector> using namespace std; string path; unordered_map<string, int> mp{{"3",3},{"4",4},{"5",5},{"6",6},{"7",7},{"8",8},{"9",9},{"10",10},{"J",11},{"Q",12},{"K",13},{"A",1},{"2",2},{"joker",-1},{"JOKER",-1}}; unordered_map<int, string> mp1{{3,"3"},{4,"4"},{5,"5"},{6,"6"},{7,"7"},{8,"8"},{9,"9"},{10,"10"},{11,"J"},{12,"Q"},{13,"K"},{1,"A"},{2,"2"},{-1,"joker"},{-1,"JOKER"}}; bool dfs(vector<int> num,int sum){ if(num.empty()) return sum==24; for(int i=0;i<num.size();++i){ vector<int> temp(num); temp.erase(i+temp.begin()); int len=path.size(); if(num.size()==4){ path+=mp1[num[i]]; if(dfs(temp,num[i])) return true; path=path.substr(0,len); } else{ path+=mp1[num[i]]; path.insert(path.begin()+len,'+'); if(dfs(temp,sum+num[i])) return true; path.erase(path.begin()+len); path.insert(path.begin()+len,'-'); if(dfs(temp,sum-num[i])) return true; path.erase(path.begin()+len); path.insert(path.begin()+len,'*'); if(dfs(temp,sum*num[i])) return true; path.erase(path.begin()+len); path.insert(path.begin()+len,'/'); if(dfs(temp,sum/num[i])) return true; path.erase(path.begin()+len); path=path.substr(0,len); } } return false; } int main() { vector<int> num(4); bool valid=true; for(int i=0;i<4;++i){ string s; cin >> s; num[i]=mp[s]; if(num[i]==-1) valid=false; } if(!valid) cout << "ERROR"; else{ if(dfs(num,0)) cout << path.substr(); else cout << "NONE"; } } // 64 位输出请用 printf("%lld")