[title]项目需求[/title]
1.N个人领红包
2.每个人领到红包总和为M元
3.每个人领到红包额度相差范围小
[title]思维逻辑[/title]
N=1时:
第一个=M
N=2时:
第一个=0.01~0.99的随机数
第二个=0.01~(M-第一个)
N=3时:
第一个=0.01~0.98的随机数
第二个=0.01~(M-第一个-0.01)的随机数
第三个=M-第一个-第二个
N=4时:以此类推
[title]算法实现[/title]
$m=m;//m元红包
$n=n;//n个人领取
$min=0.01;//每个人最少能收到0.01元
?
for ($i=1;$i<$num;$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 元';