红包算法

红包算法
给定具体人数和金额,所有人都有,所有人的金额都是随机。那么,在分配中就要限定最大额度不能超过平局值,最小额度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));
}


最终结果如下:
https://erik.xyz