题解 | #24点游戏算法# (考虑括号)

24点游戏算法

https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb?tpId=37&tqId=21290&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=

高赞题解的改进,主要多考虑了包含括号的情况

#include<iostream>
#include<vector>
using namespace std;
 
bool check(vector<double> nums, double result){ //递归检查能否组成24
    if(nums.empty()) //数组为空,判断等不等于24
        return abs(result-24)<0.001;
    if(result!=NULL)
        nums.push_back(result);
    for(int i = 0; i < nums.size()-1; i++)
        for(int j=i+1;j<nums.size();j++){ //遍历剩下的数字
            vector<double> rest(nums);
            rest.erase(rest.begin() + i);
            rest.erase(rest.begin() + j - 1); //删去使用的数字,且rest第一次删去下表i的数,第二次应该删去j-1 (j>i)
            if(check(rest, nums[i] + nums[j]) //分别 进行加减乘除4种运算
          || check(rest, nums[i] - nums[j])
          || check(rest, nums[j] - nums[i])
          || check(rest, nums[i] * nums[j])
          || (nums[j]==0?false:check(rest, nums[i] / nums[j]))
          || (nums[i]==0?false:check(rest, nums[j] / nums[i])))
            return true;
    }
    return false;
}
 
int main(){
    vector<double> nums(4);
    while(cin >> nums[0] >> nums[1] >> nums[2] >> nums[3]){ //输入4个数字
        if(check(nums, NULL))
            cout << "true" << endl;
        else
            cout << "false" << endl;
    }
    return 0;
}

全部评论

相关推荐

联洲 嵌入式软件开发 总包48w(sp+3档)
点赞 评论 收藏
分享
2024-12-30 19:21
已编辑
University of California Berkeley Java
无敌低代码大王:简历技术栈可以写清楚点,然后你想要优化项目的话,最好找一些其他同样类型的项目提取它的亮点然后加到你的项目去,比如登陆模块,别人用session,redis做登陆,你可以改成用微信扫码的方式登陆,只需要了解业务逻辑就好,不用去实现。
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
2024-12-20 15:55
门头沟学院 数据运营
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务