gpt4 book ai didi

javascript - 计算数组中的组合产品

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:14:32 24 4
gpt4 key购买 nike

我有一个这样的数组:

const arr = [2, 3, 4, 12, 4, 55, 8, 16]

我想得到数组乘积的每五个元素的总和。我目前的方法是使用五次for循环来计算结果。真是他妈的!有没有优雅的方法来解决?

输出应该与下面的方法相同:

 function getSum(arr) {
let sum = 0
for (let i = 0; i < arr.length - 4; i++) {
for (let j = i + 1; j < arr.length - 3; j++) {
for (let k = j + 1; k < arr.length - 2; k++) {
for (let l = k + 1; l < arr.length - 1; l++) {
for (let m = l + 1; m < arr.length; m++) {
sum += arr[i] * arr[j] * arr[k] * arr[l] * arr[m]
}
}
}
}
}
return sum
}

上述示例的可能元组:

2 3 4 12 4
2 3 4 12 55
2 3 4 12 8
2 3 4 12 16
2 3 4 4 55
2 3 4 4 8
2 3 4 4 16
2 3 4 55 8
2 3 4 55 16
2 3 4 8 16
2 3 12 4 55
2 3 12 4 8
2 3 12 4 16
2 3 12 55 8
2 3 12 55 16
2 3 12 8 16
2 3 4 55 8
2 3 4 55 16
2 3 4 8 16
2 3 55 8 16
2 4 12 4 55
2 4 12 4 8
2 4 12 4 16
2 4 12 55 8
2 4 12 55 16
2 4 12 8 16
2 4 4 55 8
2 4 4 55 16
2 4 4 8 16
2 4 55 8 16
2 12 4 55 8
2 12 4 55 16
2 12 4 8 16
2 12 55 8 16
2 4 55 8 16
3 4 12 4 55
3 4 12 4 8
3 4 12 4 16
3 4 12 55 8
3 4 12 55 16
3 4 12 8 16
3 4 4 55 8
3 4 4 55 16
3 4 4 8 16
3 4 55 8 16
3 12 4 55 8
3 12 4 55 16
3 12 4 8 16
3 12 55 8 16
3 4 55 8 16
4 12 4 55 8
4 12 4 55 16
4 12 4 8 16
4 12 55 8 16
4 4 55 8 16
12 4 55 8 16

最佳答案

您可以使用迭代和递归方法,方法是检查所需的长度,然后使用索引处的元素或不使用索引处的元素再次调用函数。

function getCombinations(list, size) {

function fork(index, values) {
if (values.length === size) {
result.push(values);
return;
}
if (index >= list.length) {
return;
}
fork(index + 1, values.concat(list[index]));
fork(index + 1, values);
}

var result = [];
fork(0, []);
return result;
}

var result = getCombinations([2, 3, 4, 12, 4, 55, 8, 16], 5),
sum = result.reduce((s, a) => s + a.reduce((a, b) => a * b), 0);

console.log(sum); // 2927456
console.log(result.length); // 56
console.log(result.map(a => a.join(' ')));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 计算数组中的组合产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50040903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com