题解 | #24点游戏算法#
24点游戏算法
http://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
dfs(详细注释)
using namespace std;
bool dfs(vector<double>vec){
if(vec.size()==1) return abs(vec[0]-24)<1e-5; //当vec里面只有一个数字时,与24取差进行判断。
for(int i=0;i<vec.size();i++){
for(int j=0;j<vec.size();j++){
if(i==j)continue;
double a=vec[i];
double b=vec[j]; //取两个数
vector<double>shengyu; //声明一个新容器,用于存放vec在取出前两个数之后剩下的数及前两个数的运算结果,便于下次进入dfs
for(int k=0;k<vec.size();k++){
if(k==i||k==j)continue;
shengyu.push_back(vec[k]); // 存放vec在取出前两个数之后剩下的数
}
double sum=a+b;
double sub=a-b;
double mul=a*b;
double div=a/b; //四则运算
double cards[4]={sum,sub,mul,div};
for(int m=0;m<4;m++){
shengyu.push_back(cards[m]); //存放vec在取出前两个数的运算结果
if(dfs(shengyu))return true; //递归
shengyu.pop_back(); //回溯
}
}
}
return false;
}
int main(){
vector<double>vec(4);
cin>>vec[0]>>vec[1]>>vec[2]>>vec[3];
if(dfs(vec)){cout<<"true"<<endl;}
else{cout<<"false"<<endl;}
return 0;
}