解决方案 »

  1.   


    var original_array = [42.6,140.4,60.2,46.8,11.2,106.6,57,75,47.6,90.2,115.2];
    var result = [];
    var condition = 600;main(original_array);console.log(result);
    console.log(result[0]);function main(array){
      for(var i =0; i < array.length; i++){
        process(0,array.slice(i,array.length),[]);
      }
      result.sort(function(a,b){
        return a.Total - b.Total;
      });
    }function process(num,array1,array2)
    {
      if(num >= condition){
        result.push({Total:num,Array:array2});
        if(array1.length > 0){
          var value = array2[array2.length - 1];
          num -= value;
          process(num,array1,array2.slice(0,array2.length - 1));
        }
      }else{
        if(array1.length > 0){
          var value = array1[0];
          num += value;
          array2.push(value);
          process(num,array1.slice(1,array1.length),array2);
        }
      }
    }
      

  2.   

    虽然又数组返回来,但是不知道是哪几个元素。
    document.write(result); 输出的是 [object object];
    alert(result[0]) 或 alert(result[0].toString()) ; 输出的也是[object object];
      

  3.   

    for(i=0; i<result.length; i++) 
      document.write(result[i].Total +':'+ result[i].Array + '<br>');
    609.8000000000001:60.2,46.8,11.2,106.6,57,75,47.6,90.2,115.2
    635.0000000000001:140.4,60.2,46.8,11.2,106.6,57,75,47.6,90.2
    660.0000000000001:140.4,60.2,46.8,11.2,106.6,57,75,47.6,115.2
    677.6:42.6,140.4,60.2,46.8,11.2,106.6,57,75,47.6,90.2
    702.6:42.6,140.4,60.2,46.8,11.2,106.6,57,75,47.6,115.2
      

  4.   

    <script type="text/javascript">
        function fun(arr,top) {
            var temp = [arr];
            if (arr.length < 2)return temp;
            arr.sort(function (a, b) {return a < b});//先倒序排列
            while (arr[0] >= top) {
                arr[0] == top ? temp.push([arr.shift()]) : temp = [[arr.shift()]]; //筛选出所有top及超出top的元素
            }
            var l = arr.length;//总长度
            function arr_sum(t, n) {
                for (var a = n + 1; a < l; a++) {
                    t.push(arr[a]);//合并下一个数组
                    if (eval(t.join("+")) >= top) {
                        temp.push([].concat(t));
                        t.pop();
                        arr_sum(t,a);
                        break;
                    }
                }
            }
            for (var k = 0; k < l; k++)arr_sum([arr[k]], k);//循环组合判断
            temp.sort(function (a, b) {
                return eval(a.join("+")) > eval(b.join("+"));
            });//重新排序下,前面几个才可能符合
            var Arr = [temp[0]];//默认第一个
            for (k = 1; k < temp.length; k++) {
                if (eval(temp[k].join("+")) == top)Arr.push(temp[k]);//试着判断其他
            }
            return Arr;
        }
        console.log(fun([42.6,140.4,60.2,46.8,11.2,106.6,57,75,47.6,90.2,115.2],600));
        console.log(fun([42,100,46,101,106.6,87,13,1,9,90,20,80,115.2],100));
        //按理说应该可能会返回好几个符合条件的。
    </script>
      

  5.   

    避免eval<script type="text/javascript">
        function fun(arr,top) {
            var temp = [arr];
            if (arr.length < 2)return temp;
            arr.sort(function (a, b) {return a < b});//先倒序排列
            while (arr[0] >= top) {
                var f = arr.shift();
                arr[0] == top ? temp.push([f,f]) : (temp = [[f,f]]); //筛选出所有top及超出top的元素
            }
            var l = arr.length;//总长度
            function arr_sum(t, n) {
                for (var a = n + 1; a < l; a++) {
                    t.push(arr[a]);//合并下一个数组
                    t[0]+=arr[a];//求总和
                    if (t[0] >= top) {
                        temp.push([].concat(t));
                        t.pop();
                        arr_sum(t,a);
                        break;
                    }
                }
            }
            for (var k = 0; k < l; k++)arr_sum([0,arr[k]], k);//循环组合判断
            temp.sort(function (a, b) {
                return a[0]>b[0];
            });//重新排序下,前面几个才可能符合
            console.log(temp);
            var Arr = [temp[0].slice(1)];//默认第一个
            for (k = 1; k < temp.length; k++) {
                if (temp[k][0] == top)Arr.push(temp[k].slice(1));//试着判断其他
            }
            return Arr;
        }
        console.log(fun([42.6,140.4,60.2,46.8,11.2,106.6,57,75,47.6,90.2,115.2],600));
        console.log(fun([42,100,46,101,106.6,87,13,1,9,90,20,80,115.2],100));
        //按理说应该可能会返回好几个符合条件的。
    </script>