您的位置 首页 php

php红包算法函数研究

php

简单来说,就是把一个大整数m分解(直接以“分为单位,如1元即100)分解成n个小整数的过程,小整数的范围是[min, max]。

最简单的思路,先保底,每个小红包保证有min,然后每个请求都随机生成一个0到(max-min)范围的整数,再加上min就是红包的钱数。

这个算法虽然简单,但是有一个弊端:最后生成的红包可能都是min钱数的。也就是说可能最后的红包都是0.01元的。

php红包算法

<?php

header (“Content-Type: text/html;charset=utf-8”);//输出不乱码,你懂的

$total=10000;//红包总额

$num=10;// 分成8个红包,支持8人随机领取

$min=10;//每个人最少能收到0.01元

echo ‘<pre>’;

$redarr= array ();

for ($i=1;$i<=$num;$i++)

{

$red=getredmoney($i,$total,$num,$min);

$total=$total-$red[‘money’];

echo ‘第’.$i.’个红包:’.$red[‘money’].’ 元,余额:’.$red[‘total’].’ 元 <br/>’;

$redarr[]=$red[‘money’];

}

echo ‘总金额:’.array_sum($redarr);

/**

* 获取红包

* @param $i 第几个人

* @param $total 剩余总红包金额

* @param $num 总人数

* @param $min 最小获得金额

* @param $point 保留小数位数

*/

function getredmoney($i,$total,$num=10,$min=1,$point=0){

if ($i==$num){

$money=$total;

} else {

$pre=$total/($num-$i+1);

if ($pre==$min){

$money=$min;

} else if ($pre<$min || ($pre-$min)<1){

$safe_total=$total-($num-$i)*$min;//随机安全上限

$money=@mt_rand($min*100,$safe_total*100)/100;

} else {

$safe_total=($total-($num-$i)*$min)/($num-$i);//随机安全上限

$money=@mt_rand($min*100,$safe_total*100)/100;

if ($money<$min)$money=$min;

}

$money=round($money,$point);

}

$total=$total-$money;

return array (‘i’=>$i,’money’=>$money,’total’=>$total);

}

?>

发红包

文章来源:智云一二三科技

文章标题:php红包算法函数研究

文章地址:https://www.zhihuclub.com/150449.shtml

关于作者: 智云科技

热门文章

网站地图