生活随笔
收集整理的這篇文章主要介紹了
抽奖概率算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
需求
1.指定時間:一天
2.固定獎品個數 :10
3.希望概率根據實際情況變化,不要太快抽完,也不要到結束也沒人抽到
4.每人抽一次
分析
1.剩余時間越少,概率應該越高,這要保證前期不會太快,基數/剩余時間
2.剩余獎品越少,概率應該低,獎品越少越應該控制不要太快抽完,降低概率可以做到這點,基數*剩余獎品
3.參加人數越多,概率應該越低,人的基數增加,降低概率可以保證抽中的人不會增加太多。基數/參加人數
4.如果每人抽一次,則應該用人數的增長率計算,如果一人抽多次,應該用總人數計算
概率 = 基數*剩余獎品數/剩余時間/參與人數
概率 = 基數*剩余獎品數/(剩余時間+參與人數)
基準概率 = 1%
如果概率計算后大于基準概率,則使用基準概率,否則使用計算得到的概率
function calcScale(scale_val,x){return Math.ceil(100*Math.pow(1/scale_val,$x));
}function getScale(h,h_next){//換算成分鐘var x = h.split(":");var y = h_next.split(":");var h_minute = x[0]*60+x[1]*1;var h_next_minute = y[0]*60+y[1]*1;//計算當前時間var d = new Date();var _nh = d.getHours();var _nm = d.getMinutes(); var _n_now = _nh*60+_nm;//兩次抽獎時間間隔var total = h_next_minute-h_minute;var data_x = [];var data_y = [];var data_z = [];var _now = x;var _h,_m;var scale_val = $("#scale_val").val()*1; //基數for(var i=0;i<=total;i++){_now = h_minute+i;_h = Math.floor(_now/60);_m = _now%60;if(_m<10){data_x.push(_h+":0"+_m);}else{data_x.push(_h+":"+_m);}if($(".use_specified_scale:checked").val()==2){$x = total-i;$y = calcScale(scale_val,$x);}else{$y = $("#specified_scale").val();}data_y.push($y);if(_n_now == _now){if(_n_now>=h_minute && _n_now<=h_next_minute){//當前時間段data_z = [{name : '當前概率%', value : $y+' %', xAxis: i, yAxis: $y}];}}}var data = new Array();data.push(data_x);data.push(data_y);data.push(data_z);return data;
}
總結
以上是生活随笔為你收集整理的抽奖概率算法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。