红包算法
给定具体人数和金额,所有人都有,所有人的金额都是随机。那么,在分配中就要限定最大额度不能超过平局值,最小额度1分,算法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| function moneyBag($number, $money, $min = 1) { $max = intval($money / $number); for ($i = 0; $i < $number; $i++) { if ($number - 1 == $i) { $end_arr = $money; } else { $one_money =mt_rand($min, $max); $end_arr = $one_money; $money -= $end_arr; $max = intval($money / ($number-($i+1))); } yield $end_arr; } } $last_arr = moneyBag(1000, 10 * 100); $arr = []; foreach ($last_arr as $end) { var_dump(bcdiv($end, 100, 2)); }
|
最终结果如下:
