js微信红包二倍均值算法分析
二倍均值法
剩余红包金额为M,剩余人生为N,那么有如下的公式:
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。每个人最少得到0.01元,那么
每次抢到的金额 = 随机区间 (0.01, M/N *2)
举个例子:
假设有10个人,红包金额为10元,
第1个人抢到的金额范围为 (0.01, 10/10 * 2),平均为1 元。
第2个人抢到的金额范围为 (0.01, 9/9 * 2),平均为1 元。
...
第10个人抢到的金额范围为 (0.01, 1/1 * 2),平均为1 元。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
window.onload=function(){
var oBtn=document.getElementById('btn');
var oTxt=document.getElementById('txt1');
var oNum=document.getElementById('num');
var oUl=document.getElementById('ul1');
var min=0.01;
function randomNum(min,max){
return Math.floor((Math.random()*(max-min)+min)*100)/100;
}
function money(val, num){
var nowMoney=0;
var arr=[];
while(true){
if(num==1){
arr.push(val.toFixed(2));
return arr;
}
nowMoney=randomNum(min,(val/num)*2).toFixed(2);
arr.push(nowMoney);
val-=nowMoney;
num--;
}
}
oBtn.onclick=function(){
oUl.innerHTML='';
var val=parseFloat(oTxt.value);
var num=parseInt(oNum.value);
var newArr=money(val,num);
for(var i=1; i<=num; i++){
var oLi=document.createElement('li');
oLi.innerHTML='第'+i+'人抢到'+newArr[i-1]+'元';
oUl.appendChild(oLi);
}
console.log('抢最多的为:'+Math.max.apply(null,newArr)+'抢最少的为:'+Math.min.apply(null,newArr))
}
}
</script>
</head>
<body>
<input type="text" id="txt1" />
<input type="text" id='num' />
<input type="button" value="生成" id="btn" />
<ul id="ul1"></ul>
</body>
</html>
更多精彩

