题解 | #24点游戏算法#

24点游戏算法

https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

double compute(double x,double y,char op){
    switch (op) {
        case '+': return x+y;
        case '-': return x-y;
        case '*': return x*y;
        case '/': return y!=0?x/y:0;
        default: return 0;
    }
}

bool dfs(vector<double> &num,int n,vector<char> &op){
    if (num[3]>24 || (n==3&&num[3]!=24)){
        // 大于24点、三个符号位填充完毕结果不等于24
        return false;
    } else if (n==3&&num[3]==24){
        return true;
    }
    for (auto o:op) {
        double tem = num[n+1];
        num[n+1] = compute(num[n],num[n+1],o);
        if (!dfs(num,n+1,op)){
            num[n+1] = tem;
        } else{
            return true;
        }
    }
    return false;
}

int main(){
    vector<double> arr(4,0);
    vector<char> op = {'+','-','*','/'};
    while (cin>>arr[0]>>arr[1]>>arr[2]>>arr[3]){
        bool flag = false;
        sort(arr.begin(),arr.end());
        do {
            if (flag) break;
            flag = dfs(arr,0,op);
        } while (next_permutation(arr.begin(),arr.end()));
        if (flag) cout<<"true"<<endl;
        else cout<<"false"<<endl;
    }

    return 0;
}

全部评论

相关推荐

ResourceUtilization:差不多但是估计不够准确,一面没考虑到增长人口,另一方面也没考虑到能上大学的人数比例,不过我猜肯定只多不少
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务