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);
阿神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))
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)); //测试