首頁  >  問答  >  主體

javascript - js实现随机数的和是一定的

随机数的个数是随机的,但是随机数的和是恒定的?可能实现吗?

PHP中文网PHP中文网2749 天前444

全部回覆(3)我來回復

  • PHPz

    PHPz2017-04-10 15:49:29

    function test(){
      var sum=1;
      var rm = [];
      while(true){
        var r = Math.random();
        sum = sum-r;
        if (sum>0) {
          rm.push(r);
          continue;
        }
        if (sum<0) {
          var gap = 0-sum;
          r = r-gap;
          rm.push(r);
          return rm;
        }
        if (sum==0) return rm;
      }
    }
    
    var d = test();
    console.log(d);
    

    回覆
    0
  • 阿神

    阿神2017-04-10 15:49:29

    function ran(sum) {
        var arr = [] //收集产生的随机数
        function arrSum(arr) { //数组求和函数
            var a = 0
            for (i = 0; i < arr.length; i++) {
                a += arr[i]
            }
            return a
        }
        while (arrSum(arr) < sum) { //已产生的随机数的和小于最大值时
            var max = sum - arrSum(arr) //最大为最大值与当前和的差
            arr.push(Math.floor(Math.random() * max) + 1) //继续往里填
        }
        return arr //返回填好的随机数数组
    }
    console.log(ran(30))

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-10 15:49:29

    // 产生一个和为allsum的随机数数组
    // 方法1,限制随机数的最小值
    function genran(allsum){
        var minval = 1;    // 小于这个值的时候就不再产生随机数了
        var arr = [];
        while(allsum>minval){
            var r = Math.random()*allsum;
            allsum -= r;
            arr.push(r);
        }
        if(allsum>0)
            arr.push(allsum);
        return arr;
    }
    
    // 方法2,限制随机数个数
    function genran2(allsum){
        var maxcount = 10;    // 最多产生10个
        var arr = [];
        while(allsum>0 && maxcount>0){
            var r = Math.random()*allsum;
            allsum -= r;
            arr.push(r);
            --maxcount;
        }
        if(allsum>0)
            arr.push(allsum);
        return arr;
    }
    
    
    console.log(genran(100)); //测试
    console.log(genran2(100)); //测试

    回覆
    0
  • 取消回覆