穷举法写一个24点游戏js
时间: 2023-12-13 14:03:05 浏览: 32
以下是一个简单的24点游戏的 JavaScript 代码,使用了穷举法来找到所有可能的组合:
```javascript
function calculate24(nums) {
const ops = ['+', '-', '*', '/'];
function dfs(nums) {
if (nums.length === 1) {
if (Math.abs(nums[0] - 24) < 1e-6) {
return true;
}
return false;
}
for (let i = 0; i < nums.length; i++) {
for (let j = 0; j < nums.length; j++) {
if (i === j) continue;
const newNums = [];
for (let k = 0; k < nums.length; k++) {
if (k !== i && k !== j) {
newNums.push(nums[k]);
}
}
for (let k = 0; k < ops.length; k++) {
if (ops[k] === '/' && Math.abs(nums[j]) < 1e-6) continue;
let res;
switch (ops[k]) {
case '+':
res = nums[i] + nums[j];
break;
case '-':
res = nums[i] - nums[j];
break;
case '*':
res = nums[i] * nums[j];
break;
case '/':
res = nums[i] / nums[j];
break;
}
newNums.push(res);
if (dfs(newNums)) {
return true;
}
newNums.pop();
}
}
}
return false;
}
return dfs(nums);
}
const nums = [4, 2, 3, 6];
console.log(calculate24(nums)); // true
```
在这个代码中,我们使用了一个深度优先搜索的算法来找到所有可能的组合。我们先从数组中选择两个数,然后尝试对它们进行加、减、乘、除四种运算中的一种,得到一个新的数组。我们继续对这个新的数组进行递归搜索,直到只剩下一个数字或者找到了符合要求的组合。如果我们找到了符合要求的组合,就返回 true,否则返回 false。
需要注意的是,在进行除法运算时,如果除数为 0,就会出现除以 0 的情况,因此我们需要特判一下。此外,由于 JavaScript 中浮点数的精度问题,我们不能直接比较两个浮点数是否相等,而是需要使用一个很小的数作为精度误差的容忍度,例如这里使用了 1e-6。