您的位置:首页 > 其它

LINTCODE——Compute 24 Game

2017-12-16 21:42 218 查看
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
9254
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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: