微信红包算法-php代码
来源:互联网 发布:windows 网络重置 编辑:程序博客网 时间:2024/05/19 14:38
今天看见一篇文章说微信红包的算法,大致是说微信红包的金额是随机生成的,而且是在最小0.01 到 剩余平均值 * 2之间. 感觉挺有意思的, 我用php的代码初步实现下.
class hongbao{public $size;public $money;public function __construct($size=10, $money=100){$this->size = $size;$this->money = $money;}}class suanfa{public static function weixin_hongbao(hongbao $hongbao){$result = array();while ($hongbao->size) {if ($hongbao->size == 1){// 最后一个就不用随机了--$hongbao->size;$result[] = $hongbao->money;return $result;}// 最小金额$min = 0.01;// round是为了让数据好看点,毕竟浮点数运算不准确$max = $hongbao->money / $hongbao->size *2;$money = mt_rand(1, $max * 100) / 100;$money = round( $money <= $min ? $min : $money, 2);--$hongbao->size;$hongbao->money -= $money;$result[] = $money;}return $result;}}
再测试下吧:
$sum = array(0,0,0,0,0,0,0,0,0,0);for($i=0; $i<1000000; $i++){$res = suanfa::weixin_hongbao(new hongbao());$sum[0] += $res[0];$sum[1] += $res[1];$sum[2] += $res[2];$sum[3] += $res[3];$sum[4] += $res[4];$sum[5] += $res[5];$sum[6] += $res[6];$sum[7] += $res[7];$sum[8] += $res[8];$sum[9] += $res[9];}echo "<pre>";print_r($sum);echo "</pre>";
结果还是很符合随机的:
Array( [0] => 9990770.7299997 [1] => 9998308.1599992 [2] => 10010790.76 [3] => 9998949.2799996 [4] => 10000814.14 [5] => 10000397.44 [6] => 10015352.29 [7] => 10010060.159999 [8] => 9986673.2899996 [9] => 9987883.7500001)
至于为什么小数点后面会有这么多位, 因为php的float运算不准确...
原文链接
0 0
- 微信红包算法-php代码
- 代码笔记 | 微信红包算法
- 微信红包算法
- 微信红包算法
- 微信红包算法
- 微信红包算法
- 微信红包算法
- 微信红包算法
- 微信红包算法?
- [算法] -- 微信红包算法
- 微信公众号微信红包开发 PHP代码
- 微信红包随机生成算法(PHP版)
- 微信红包的算法实现探讨(基于PHP)
- 关于微信红包简单算法 PHP Edition
- 微信红包随机生成算法(PHP版)
- 微信红包签名算法 C#代码实现
- 微信随机红包数详解和算法代码
- php模拟微信红包
- HDOJ-2037今年暑假不AC
- HDU 1046 & POJ 1450 Gridland【有趣的数学题】
- inode获取设备号
- HDOJ1013大数处理
- poj Heavy Transportation
- 微信红包算法-php代码
- LARS 最小角回归算法程序代码使用归类使用
- Codeforces 614C Peter and Snow Blower
- nginx应用场景
- VC封装Ping命令的实现
- http请求报文介绍
- java 内部类作用
- Java多线程基础
- 习题12 提示别人