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


查看10道真题和解析