随机生成红包金额算法
2016-12-07 00:00
246 查看
/** * 随机生成红包金额 * @param $n 红包个数 * @param $sum 总金额 整数 * @param $index_max 最大金额在数组中索引 * @param $error * @return array|false */ public static function GenRandRePacketsData($n,$sum,&$index_max,&$error) { //$n = 20; //$sum = 300; if($sum < $n) { $error = '金额总数不能小于红包个数'; //$error = '金额总数必须大于红包个数'; return false; } if($n > 50) { $error = '红包数量不能大于50'; return false; } //$sum = $sum * 100;//转为分 $rst = []; $ave = intval($sum/$n); // 金额除去红包个数 平均值 test:3/3 = 1 $one_rst = rand(1,$ave); // 随机取1到平均值的数 $subSum = $one_rst; // 1 //$rst[] = $one_rst/100; $rst[] = $one_rst; // $rst = ['0'=>1]; $index_min = 0; $index_max = 0; $min = $one_rst; // 1 $max = $one_rst; // 1 for($i = 2; $i <= $n; $i ++) { $ave = intval(($sum - $subSum)/($n - $i + 1)); // 1 $one_rst = rand(1,$ave); // 1 if($min > $one_rst) // 1 > 1 { $min = $one_rst; $index_min = $i -1; } if($max < $one_rst) // 1 < 1 { $max = $one_rst; $index_max = $i -1; } //$rst[] = $one_rst/100; $rst[] = $one_rst; $subSum += $one_rst; // 1 } $left = $sum - $subSum; if($left > 0) { //$rst[$index_min] = ($rst[$index_min] + $left/100); $rst[$index_min] = ($rst[$index_min] + $left); if($rst[$index_min] > $max) { $max = $rst[$index_min]; $index_max = $index_min; } } //检测重复的最大值处理,确保最大值唯一 /*for($i =0; $i < $n; $i++) { if($rst[$i] === $max && $i !== $index_max) { $one_rst = $rst[$i] -1; $rst[$i] = $one_rst; $rst[$index_max] = $max + 1; break; } }*/ //重新乱序 shuffle($rst); //查找最大值 $index_max = 0; $max = $rst[0]; for($i =1; $i < $n; $i ++) { if($rst[$i]> $max) { $index_max = $i; $max = $rst[$i]; } } return $rst; }
相关文章推荐
- 微信随机生成红包金额算法php版
- 微信随机生成红包金额算法php版
- 微信随机生成红包金额算法java版
- 微信红包指定总金额随机生成每个红包金额算法
- 微信红包随机生成算法php版
- python 实现红包随机生成算法
- 随机红包生成算法-python实现
- 微信红包随机生成算法(PHP版)
- jquery+php随机生成红包金额数量代码分享
- 百度作业帮 生成随机红包算法
- jquery+php随机生成红包金额数量代码分享
- python 实现红包随机生成算法的简单实例
- 红包随机金额生成的方法
- 微信红包随机生成算法php版
- 微信红包随机生成算法(PHP版)
- PHP 随机生成红包算法
- 微信红包随机生成算法(PHP版)
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(7)习题2.8 随机数组的三种生成算法
- 白话经典算法系列之十三 随机生成和为S的N个正整数——投影法
- 使用洗牌算法生成随机序列