LINTCODE——Compute 24 Game

来源:互联网 发布:mid函数的使用方法vb 编辑:程序博客网 时间:2024/05/23 19:07

LINTCODE——Compute 24 Game

题目:给你一个由4个数字组成的数组,判断这4个数能否通过*, /, +, -, (, ) ,计算得到24;

思路:刚开始我想错了,以为只能再4个数中间添加运算符,结果题目是可以调换数组顺序的,修改之后依次遍历数组的情况,用next_permutation函数遍历,出现一个能计算得24立马结束程序;

class Solution {public:    /**     * @param nums: 4 cards     * @return: whether they could get the value of 24     */    bool compute24(vector<double>& nums) {        //进行排序,从小到大        sort(nums.begin(), nums.end());        do {            if (valid(nums))                 return true;        } while(next_permutation(nums.begin(), nums.end()));        //next_permutation输出比当前序列大的数列        return false;    }    bool valid(vector<double>& nums) {        double a = nums[0], b = nums[1], c = nums[2], d = nums[3];        //暴力美学,强势破解;以下同理        if (valid(a+b, c, d) || valid(a-b, c, d) || valid(a*b, c, d) || valid(a/b, c, d)) return true;        if (valid(a, b+c, d) || valid(a, b-c, d) || valid(a, b*c, d) || valid(a, b/c, d)) return true;        if (valid(a, b, c+d) || valid(a, b, c-d) || valid(a, b, c*d) || valid(a, b, c/d)) return true;        return false;    }    bool valid(double a, double b, double c) {        if (valid(a+b, c) || valid(a-b, c) || valid(a*b, c) || b&&valid(a/b, c)) return true;        if (valid(a, b+c) || valid(a, b-c) || valid(a, b*c) || c&&valid(a, b/c)) return true;        return false;    }    bool valid(double a, double b) {        if (abs(a+b-24.0) < 0.0001 || abs(a-b-24.0) < 0.0001 || abs(a*b-24.0) < 0.0001 || b&&abs(a/b-24.0) < 0.0001)             return true;        return false;    }};
原创粉丝点击