使用javascript实现二倍均值法 抢红包
function getRandomBonus(totalAmount, totalNum) {
let amounts = []; // 存放每个红包的金额
let restAmount = totalAmount; // 剩余待分配的金额
let restNum = totalNum; // 剩余未分配的红包数
for (let i = 0; i < totalNum - 1; i++) { // 循环 totalNum - 1 次,分配前 totalNum - 1 个红包
let amount = Math.random() * (restAmount / restNum) * 2; // 随机生成一个金额,范围为 [0.01, 2 * restAmount / restNum - 0.01] 元
amount = Math.floor(amount * 100) / 100; // 保留两位小数
amounts.push(amount);
restAmount -= amount;
restNum--;
}
amounts.push(restAmount); // 把剩下的金额放到最后一个红包中
return amounts;
该算法接受两个参数 totalAmount 和 totalNum,分别表示待分配的总金额和红包个数。在算法内部,循环 totalNum - 1 次,每次根据随机范围
[0.01,*2-0.01] 产生一个随机金额(注意要向下取整保留两位小数),并将其存入 amounts 数组中,同时更新剩余待分配的金额和红包个数。最后将剩余的金额作为最后一个红包的金额返回即可。
需要注意的是,由于该算法使用了随机数,因此每次运行结果可能会不同。如果在实际应用中需要保证随机结果的一致性,可以通过生成一组随机种子来实现。