PHP实现微信/QQ手气红包,随机算法分享
- A
最近有个客户找我实现扫码抢手气红包,大家平时都在使用微信/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; }
经过傲世的多次测试,抢到的红包面额在概率上是大致均匀的。
傲世》原创,转载请保留文章出处。
本文链接:https://www.recho.cn/186.html
如您对本文章内容有所疑问、反馈或补充,欢迎通过邮箱:[email protected] 联系我们!
版权声明:若无特殊注明,本文为《正文到此结束