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;
}