有一个随机个数的数组,里面的都是数字,然后随机个数相加,不能大于6但要最接近6。相加过的数字弹出,剩下的在相加,直到都加完。
     不知道用js能做么

解决方案 »

  1.   

    问题描述清楚!
    不能大于6但要最接近6 。是指随机相加的和?
    那么数组是float的?var arr= [];
    for(var i=0;i<20;i++)
      arr.push(Math.random());
    var sum=0;
    var result =[];
    var temp=[];
    var index = 0;
    for(var i=0;i<arr.length-1;i++)
    {
       sum+=arr[i];
      temp.push(arr[i]);
     if(i==arr.length-2 )
    {
       if(sum+arr[i+1]>=6){
        result.push(temp.join("+")+"="+sum+"\n");
         result.push(arr[i+1]+"="+arr[i+1]+"\n");
        break;
      }else{
         sum+=arr[i];
      temp.push(arr[i]);
         result.push(temp.join("+")+"="+sum+"\n");
        break;
      }
         
    }else
      if(sum<6 &&sum+arr[i+1]>=6 )
      {
        result.push(temp.join("+")+"="+sum+"\n");
        temp = [];sum=0;
      }
    }
      

  2.   

    var arr=[400,453,334,45,345,354,353422,34324,324,234,100,150,150,150,150];
    var times=0;
    function cul(arr){
     times++;
     var result=0;
     var j=(Math.random()*6>>>0); //随机产生要加的数字个数
     for(var i=0;i<j;i++){
       if(arr[i]){
        result+=parseInt(arr.splice(i,1),10);
       }
     }
     alert("第"+times+"次相加结果:"+result);
     if(arr.length>0){
       cul(arr);
     }
    }
    cul(arr);以上应该满足楼主的要求了!
      

  3.   


    这个应该能满足了,i<j变成i<j&&i<arr.length更好,不过张兄解释一下,为什么要var j=(Math.random()*6>>>0); 
    >>>0的作用是?
      

  4.   

    >>>0的作用是取得随机产生的6以内的数的整数部分!
      

  5.   

    js中有floor和ceil函数,但是会涉及到四舍五入
      

  6.   

    搞错了。我不是说小于6个数相加,我是说相加的数<=600。随便几个数相加,但如果数够多的话就先要最接近600的。我想js可能做不到呀,就算可以做到,但数组的长度可能会很长,每得出一个数都得循环几百次。
      

  7.   

    可以做到,只要循环一次就可以将所有<=600的数进行相加,比上面的解答更简单,如下:var arr=[4300,453,1520,1510,1540,150,234,432,555,453,453,453,453,453,453,453,453,100,100,100,100,100,645,100,100,100,100,100,100,100,100,100,100,100,100,100];
    function cul(arr){
     var result=0;
     arr.sort(function(a,b){return b-a;}); //从大到小排序
     for(var i=0;i<arr.length;i++){
      if(parseInt(arr[i],10)<=600){//只相加<=600的数
       result+=parseInt(arr[i],10);
      }
     }
     alert(result);
    }
    cul(arr);
      

  8.   

    我觉得我怎么就说不清楚呢,有一个随机长度的数组,他里面的值的最大数不会大于600,然后我要里面的数相加,得到的和<=600,先要把相加的和最接近600的数相加,比方
    arr=[400,100,200,200,200]就先要把后面的三个200相加,然后加前面的400和100,要求返回相加的和跟相加这个和的数组。还是要非常谢谢楼上
    想问下为什么下面arr.sort(function(a,b){return b-a;}); //从大到小排序可以让数组从大到小排序?