红包算法
来源:互联网 发布:supfire神火官方淘宝 编辑:程序博客网 时间:2024/04/29 11:06
min 最小金额max 最大金额total 剩余总金额num 剩余总人数
if (num == 1){ return total}
// 更新随机种子
srand(time(NULL));
// 确定本次随机范围
LONG low = (total – (num-1) * max) < min ? min : total – (num-1) * max;LONG high = (total – (num-1) * max) > max ? max : (total – (num-1)*min);LONG ave = total / num > 1 ? total / num : 1;// 调整上限if (high > 2 * ave) high = 2 * ave;// 生成随机支LONG ram = random() % high;// 防止溢出if (ram < low) ram = low;if (ram > high) ram = high;return ram;
@算法二
100元发10个红包,100元换算为分是10000,则这个随机数范围是1-9999,生成9个不重复的随机数并排序,假设为n1-n9,n0=0,n10=10000,则10个红包的钱分别是n1-n0…n10-n9,再换算为元
代码
$ cat split.php
<?php $packs = split_money(100, 10); var_dump($packs); function split_money($money, $count) { $money *= 100; $list = array(0); for ($i = 1; $i < $count; ++$i) { while(in_array($r = mt_rand(1, $money), $list)); $list[] = $r; } sort($list); $list[] = $money; $packs = array(); for ($i = 0; $i < $count; ++$i) $packs[] = ($list[$i + 1] – $list[$i]) / 100; return $packs; } array(10) { [0] => double(23.09) [1] => double(33.62) [2] => double(0.71) [3] => double(19.3) [4] => double(0.24) [5] => double(0.47) [6] => double(5.52) [7] => double(2.32) [8] => double(5.47) [9] => double(9.26) }
0 0
- 红包算法
- 红包算法
- 红包算法
- 红包算法
- [算法] -- php固定红包 + 随机红包算法
- 红包抽奖算法
- 微信群红包算法
- 微信红包算法
- 红包随机算法
- 红包平均分配算法
- 微信红包算法
- 红包算法1
- 微信红包算法
- 发手气红包算法
- 微信红包算法
- 微信红包算法
- 微信红包算法
- 红包算法相关探究
- List新增数据时,事件接收器回触发新增、更新事件
- 汉澳sinox为中国提供完善的操作系统解决方案
- 关于应用第一次安装打开,点击home键,然后再点击图标打开时,重复打开页面问题
- Mac下终端常用命令符的使用
- 杨辉三角
- 红包算法
- Unix指令
- Openh264编译小记
- C语言读取输入的字符并写入到文件中
- 创建一个简单的配置android编译环境的脚本
- c++类内强制类型转换&访问共享文件夹提示0未知的用户名或密码错误
- 21天学通C++--阅读笔记2
- Linux 文件时间详解 ctime mtime atime
- hdu 5171 矩阵快速幂