微信红包的随机算法基础实现
微信发红包的一个小算法
目的说明
一、假设有 n 个人领红包;
二、每个人领到红包总和为 m 元;
三、每个人至少领到 0.01 元红包;
四、每个人领到红包额度相差范围小。
思维逻辑
当 n 为1时:n1 = m
当 n 为2时:n1 = 0.01 ~ m n2 = m - n1
当 n 为3时:n1 = 0.01 ~ m n2 = 0.01 ~ ( m - n1 ) n3 = m - n1 - n2
算法实现
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$m=m; //M元红包 $n=n; //N个人领取 $min=0.01; //每个人最少能收到0.01元 for ($i=1;$i<$n;$i++) { $avg = ($m-($n-$i)*$min)/($n-$i); $money = mt_rand($min*100,$avg*100)/100; $m -= $money; echo '第' . $i . '个红包:' . $money . '元,余额:' . $m . '元'; } echo '第' . $n . '个红包:' . $m . '元,余额:0元'; |