Здравствуйте! Есть проблема, уже дня три не могу решить. Есть массив числе, и есть значение К количество чисел, которые нужно сложить. Например дан массив [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 либо равняющемуся ему. Ну могу найти логическую ошибку, не со всеми массивами может работать. 28 строка где идет проверка значения работает не правильно, если ответ не будет найдет до того как это условие будет ложно то получается ошибка, а без него идет переполнение стека, подскажите как можно переделать.
:
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 либо равняющемуся ему. Ну могу найти логическую ошибку, не со всеми массивами может работать. 28 строка где идет проверка значения работает не правильно, если ответ не будет найдет до того как это условие будет ложно то получается ошибка, а без него идет переполнение стека, подскажите как можно переделать.