一个数M,分成N份,最小是minv,每份数值是10的整数倍。求方法。

    function randomSplit(m,n,minv,maxv){
        var res=[];
        while(n>0){
            l = Math.max(minv,m-(n-1)*maxv);
            r = Math.min(maxv,m-(n-1)*minv);
            num = Math.floor(Math.random() * (l - r)) + r;
            n -= 1;
            m -= num;
            res.push(num);
        }
        console.log(res);
    }    

我搞出来一个,数m,分成n份,每份最小minv,最大maxv。生成的数,不是10的整数倍。
例如: randomSplit(45000,3,10000,20000)  
[10512, 15316, 19172]

也不是很准确,10512超出了,怎么能改成,每次是10的整数倍。
例如: randomSplit(5000,3,1000,2000)
生成这种:[1550,1660,1790] 3份合计是5000,每个数都是10的倍数,不小于1000。

阅读 1.8k
1 个回答

除了求和数M,最大最小数皆为10的倍数,随机函数也必须生成10的倍数方可,如下所示

    function randomSplit(m,n,minv,maxv){
        var res=[];
        while(n>0){
            l = Math.max(minv,m-(n-1)*maxv);
            r = Math.min(maxv,m-(n-1)*minv);
            num = Math.floor(Math.random() * (l - r)/10)*10 + r;
            n -= 1;
            m -= num;
            res.push(num);
        }
        console.log(res);
    }    

测试

randomSplit(45000,3,10000,20000) 
(3) [10770, 14950, 19280]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题