今天在群里听朋友说公司要他写一个红包分配算法,闲来无事,就临时帮他写了一下。 废话不多说,直接上代码:
$num = 3; //红包个数
$total = 10; //红包总金额
$scale = array(); //比例数组
for($i=0; $i<$num; $i++){
$scale[] = rand(1,100);
}
$count = array_sum($scale); //总比例
foreach($scale as $key=>$val){
$total * ($val/count); //循环依次得到每个人领的红包,需要做下小数点处理。
}
实现思路大概是这样的 :
如果将10块钱发3个红包 , 那就产生3个1-100 之间的随机数。 比如 5 64 21 。
5分别占这3个 数总和的 5/(5+64+21) = 5/90 约等于 0.05
那就用 10块钱的红包金额 乘 0.05
就是第一个人得到的红包了
在用64/(5+64+21) = 64/90 = ...
那就用 10块钱的红包金额 乘 0.05
就是第一个人得到的红包了
在用64/(5+64+21) = 64/90 = ...
得到第二个人得到的红包,依次类推。
这样是公平的 ,
因为产生随机数 都是从1-100
因为产生随机数 都是从1-100