欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

抽奖概率算法

发布时间:2023/12/31 编程问答 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 抽奖概率算法 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

需求

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; }



总结

以上是生活随笔为你收集整理的抽奖概率算法的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。