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>

更多精彩