Здравствуйте! Есть проблема, уже дня три не могу решить. Есть массив числе, и есть значение К количество чисел, которые нужно сложить. Например дан массив [0,1,2,3,4,5,6,7] и К=3, нужно сложить сначала 3 первых числа, затем два первых и следующее через одно. То есть 0+1+2 / 0+1+3 / 0+1+4 .... 0+2+3 / 0+2+4 / и тд пока не получатся все комбинации. Есть такой код
mas - массив чисел, k - количество чисел которое нужно сложить, t значение которое сравнивается с ответом.
да и еще среди сумм чисел необходимо найти близкое к t либо равняющемуся ему. Ну могу найти логическую ошибку, не со всеми массивами может работать. Будьте добры подскажите где ошибка.
:
function chooseBestSum(t, k, mas) {
var coord = [];
var rezmas = [], max = [];
var h = 0;
var top = 0;
for (var i = 0; i < k; i++)
coord[i] = i;
for (var i = 1; i <= k; i++) {
max[i-1] = mas.length-k+i;
}
if (mas.length < k)
return null;
var ret = rek(mas, coord, rezmas, k, 0, max, h, t);
for (var i = 0; i < ret.length; i++) {
if (top < ret[i] && ret[i] <= t)
top = ret[i];
}
if(top == 0)
top = null;
return top;
}
function rek(mas, coord, rezmas, k, p, max, h, t) {
var prom = 0;
if (coord[coord.length - 1] < mas.length) {
for (var i = 0; i < k; i++)
prom += mas[coord[i]]
if(prom <= t){
rezmas[p] = prom;
if (coord[0] != mas.length - k) {
prom = 0;
p++;
coord[coord.length - 1] += 1;
rek(mas, coord, rezmas, k, p, max, h, t);
} else return rezmas;
}
} else {
h = 0;
for (var j = 0; j < k; j++) {
if (coord[j] == max[j]) {
coord[j - 1] = coord[j - 1]+1;
for (var o = 0; o < k - (j); o++) {
coord[j + o] = coord[j + o-1] + 1;
h = h + 1;
}
}
if (h>0)
{
break;
}
}
rek(mas, coord, rezmas, k, p, max, h, t);
}
return rezmas;
}
да и еще среди сумм чисел необходимо найти близкое к t либо равняющемуся ему. Ну могу найти логическую ошибку, не со всеми массивами может работать. Будьте добры подскажите где ошибка.