【javascript】生成n个总数为x的随机数,随机数求和等于固定值【算法】

本文介绍了两种方法生成n个随机数,使得这些随机数的总和等于一个固定的值。思路1是顺序分配,但可能导致首项过大,后续分配困难。思路2模拟小朋友分苹果,通过随机分配实现更公平的方法,尽管循环次数可能较多。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生成n个总数为x的随机数,随机数求和等于固定值

思路1:

按顺序分,分了第一个的后,剩下的再分第二个,分完倒是第二的后,剩下的都给倒数第一个

缺点:第一个永远没有超过一半的机会;容易越分越小;首位通常是最大的数。

var arr  = new Array(10).fill(0)
		

function randGenerator(n, x) {
	var arr = [];
	var fSumTmp = x;
	var iAcc = 0;
	while (ResTem<n){
		for (var i = 0; i < (n -1); i++) {
			var iTmp = Math.ceil(Math.random() * (fSumTmp/2));
			arr.push(iTmp);
			fSumTmp -= iTmp;
			iAcc += iTmp;
			}
		ResTem = sum-iAcc;
	}
	if (ResTem>0 && ResTem<n){
		for (i=0; i<ResTem; i++){
			value_idx = parseInt(Math.random()*x);
			arr[num] ++;
				}
			}
		}

思路2:

小朋友分苹果,每个苹果随机分配给某一个小朋友,分x次
非常公平的分法
缺点:循环次数太多了

var arr  = new Array(n).fill(0)
for(var i=0;i<x;i++){
    var num = parseInt(Math.random()*10)
    arr[num] ++
}
console.log(arr)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值