随机数的个数是随机的,但是随机数的和是恒定的?可能实现吗?
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))
// 产生一个和为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)); //测试
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决