[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 元';
2 replies on “PHP随机红包算法 代码实例”
实际发出来的红包有时候比预定的红包还多…..
你可以尝试将随机数的范围变大,以降低抽中的几率。