PHP实现微信/QQ手气红包,随机算法分享

首页 » 经验教程 » 正文

大家平时都在使用微信/QQ收发红包,玩的不亦乐乎。别人在抢红包,而程序员在研究红包算法。那么手气红包的随机分配算法是怎么实现的呢?怎么保证没人都领得到,而且满足正态分布呢?经过一个晚上的时间,通过网上搜寻和自己优化,终于把算法测试完毕了,顺道分享一下!

逻辑:

红包金额100元,10个人分。
第一份:系统由0.01~100元之间随机一个数,作为这一份的钱数,设x1。
第二份:剩下的钱(100-x1),系统由0~(100-x1)/(10-1)随机一个数,作为这份的钱数,设x2。
依次类推
第n份:剩下的钱(100-x1-x2-…-xn),系统由0~(100-x1-x2-…-xn-1)/(10-n)随机一个数,作为这个份的钱数,设为xn

根据逻辑我们可以推算出如下PHP代码:

/**
 * 拼手气红包随机算法
 * @param int $min 可以抢到的最小金额
 * @param int $num 剩余的红包数量
 * @param int $remainmoney 剩余的钱
 */
function getRandomMoney($min, $num,$remainmoney) {
    if ($num == 1) {
        $num --;
        return round($remainmoney * 100) / 100;
    }
	$max   = $remainmoney / $num * 2;
	$money = mt_rand() / mt_getrandmax() * $max;
    $money = $money <= $min ? $min : $money;
    $money = floor($money * 100) / 100;
    $num--;
    $remainmoney -= $money;
    return $money;
}

多次本人测试,抢到的红包面额在概率上是大致均匀的。

标签:

未经允许不得转载:作者:浅安, 转载或复制请以 超链接形式 并注明出处 浅安博客
原文地址:《PHP实现微信/QQ手气红包,随机算法分享》 发布于2021-01-07

分享到:
赞(0) 打赏 生成海报
就爱代挂 - 最专业的QQ等级加速平台!

发表评论 抢沙发

6 + 9 =


长按图片转发给朋友

觉得文章有用可以打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册