надо разбить массив на подмассивы
есть массив, например [51, 56, 58, 59, 61], надо разбить его на подмассивы из N чисел
Например из 3(может быть любое количество): [51,56,58], [51,56,59], [51,56,61], [51,58,59], [51, 58,61], [51,59,61], [56,58,59], [56,58,61], [56,59,61], [58,59,61]
После посчитать суммы всех получившихся подмассивов и вывести сумму наибольшую возможную к заданному пределу 't', например 173
в данном случае у меня выдает масимальное число 805, а должно быть 876, не понимаю почему
function comb(arr, depth) {
const res = new Set();
if (depth === 0) res.add([]);
else {
for (const pc of comb(arr, depth - 1)) {
for (const e of arr) {
if (pc.indexOf(e) !== -1) break;
res.add([e, ...pc].sort((a, b) => a - b));
}
}
}
return res;
}
let sum = []
console.log([...comb([100, 76, 56, 44, 89, 73, 68, 56, 64, 123, 2333, 144, 50, 132, 123, 34, 89], 8)].map(e => [e, sum.push(e.reduce((a, b) => a + b, 0))]));
console.log(sum.sort())
Ответы (1 шт):
Автор решения: Проста Miha
→ Ссылка
Прошу, и максимальная сумма из данного массива [51, 56, 58, 59, 61] это 178, потому-что [58 + 59 + 61] = 178)
P.S: способ не самый лучший
let array = [51, 56, 58, 59, 61];
let comb = 3;
let sum = 0;
var combinations = (function() {
let res = [];
function combinations(arr, k, start, idx, current) {
if (idx === k) {
res.push(current.slice());
return;
}
for (let i = start; i < arr.length; i++) {
current[idx] = arr[i];
combinations(arr, k, i + 1, idx + 1, current);
}
}
return function(arr, k) {
res = [];
combinations(arr, k, 0, 0, []);
let temp = res;
res = null;
return temp;
};
}());
var result = combinations(array, comb);
for (let i = 0; i < result.length; i++) {
let temp = result[i].reduce((a, b) => a + b, 0);
sum = temp > sum ? temp : sum;
}
console.log(result);
console.log(sum);