红包的随机算法基础实现

2017年6月19日 2.5k 次阅读 2 条评论

目的说明

一、假设有 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

……

算法实现

$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元';

Vtrois

没有天生的高手,更没有永远的菜鸟!

  1. Titan说道:

    可以很强势 :razz:

发表评论

在发表评论前请确认您的言论中没有违反中国各项法律、法规和违背社会道德的内容。任何无意义的留言内容都会被直接删除。