Quantcast
Channel: Форум программистов и сисадминов Киберфорум
Viewing all articles
Browse latest Browse all 514745

Сложение элементов массива по несколько штук - AngularJS

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

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;
        }

mas - массив чисел, k - количество чисел которое нужно сложить, t значение которое сравнивается с ответом.
да и еще среди сумм чисел необходимо найти близкое к t либо равняющемуся ему. Ну могу найти логическую ошибку, не со всеми массивами может работать. Будьте добры подскажите где ошибка.

Viewing all articles
Browse latest Browse all 514745

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>