抽奖概率算法

需求

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




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值