题解 | #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;
}
全部评论

相关推荐

03-01 21:45
中北大学 golang
孤蓝长空:请你说一下为什么你用websocket而不是http,请你说一下什么是rpc,为什么用rpc,你的rpc的传输协议是JSON,xml还是什么 请你描述一下你的鉴权流程(完整的) 我问的是第二个项目,随便问的哈哈哈
开工第一帖
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务