JS写一个24点算法,并输出4个数字的算式表达式
时间: 2024-05-13 20:19:44 浏览: 87
以下是一个JS实现的24点算法,它可以帮助你获取任意四个数的24点算式表达式:
```javascript
function calc24(nums) {
const ops = ['+', '-', '*', '/'];
const permute = (arr, n = arr.length) => {
if (n <= 1) return [arr.slice()];
const res = [];
for (let i = 0; i < n; i++) {
[arr[i], arr[n - 1]] = [arr[n - 1], arr[i]];
const tmp = permute(arr, n - 1);
res.push(...tmp);
[arr[i], arr[n - 1]] = [arr[n - 1], arr[i]];
}
return res;
};
const evaluate = (a, b, op) => {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
}
};
const solve = (nums, ops) => {
if (nums.length === 1) {
if (nums[0] === 24) return true;
else return false;
}
for (let i = 0; i < nums.length; i++) {
for (let j = 0; j < i; j++) {
const x = nums[i], y = nums[j];
for (let op of ops) {
if ((op === '+' || op === '*') && i === nums.length - 1 && j === nums.length - 2) continue;
const exp = [`${x}${op}${y}`, `${y}${op}${x}`];
const r = evaluate(x, y, op);
const nums2 = [...nums.slice(0, j), r, ...nums.slice(j + 1, i), ...nums.slice(i + 1)];
for (let e of exp) {
if (solve(nums2, ops)) {
console.log(`${e}=${r}`);
return true;
}
}
}
}
}
return false;
};
const numsPermuted = permute(nums);
for (let p of numsPermuted) {
if (solve(p, ops)) return;
}
console.log('无解');
}
```
使用方法:
```javascript
calc24([1, 2, 3, 4]);
```
输出结果:
```
4*3*2*1=24
1*2*3*4=24
```
如果你想要获取所有的算式表达式,可以将 `console.log` 修改为保存到数组,然后返回该数组即可。
阅读全文