美文网首页
PHP二倍均值法实现随机红包算法

PHP二倍均值法实现随机红包算法

作者: echo1028 | 来源:发表于2020-02-19 20:33 被阅读0次
/**
 * 二倍均值法随机红包算法
 * @param $totalAmount 总金额  单位为分
 * @param $minAmount 最少金额  单位为分
 * @param $totalNum  人数
 * @return array
 */
function redPacket($totalAmount, $totalNum, $minAmount = 1)
{
    // 每人至少{$minAmount}分
    if  ($minAmount * $totalNum > $totalAmount) return [];

    $result = [];
    $restAmount = $totalAmount;
    $restNum = $totalNum;

    for ($i = 0; $i < $totalNum - 1; $i++) {
        // 随机范围[1,剩余人均金额的两倍),左闭右开
        $amount = mt_rand($minAmount, floor($restAmount / $restNum) * 2 - $minAmount);
        $restAmount -= $amount;
        $restNum--;
        array_push($result, $amount / 100);
    }

    array_push($result, $restAmount / 100);
    return $result;
}

$money = 0.5 * 100;
$num = 50;
$result = redPacket($money, $num);

if (empty($result)) die('红包金额有误') . "\n";
print_r($result);
echo "\n总计:" . array_sum($result) . "\n";
echo "\n手气最佳为:" . max($result) . "\n";
echo "\n手气最差为:" . min($result) . "\n";

说明

  1. 公式:(0, M/N * 2),M为剩余红包金额,N为剩余人数,这个公式,保证了每次随机金额的平均值是相等的,不会因为抢红包的先后顺序而造成不公平。

  2. 举例说明:

假设有10个人,红包总额100元。

100/10X2 = 20, 所以第一个人的随机范围是(0,20 ),平均可以抢到10元。

假设第一个人随机到10元,那么剩余金额是100-10 = 90 元。

90/9X2 = 20, 所以第二个人的随机范围同样是(0,20 ),平均可以抢到10元。

假设第二个人随机到10元,那么剩余金额是90-10 = 80 元。

80/8X2 = 20, 所以第三个人的随机范围同样是(0,20 ),平均可以抢到10元。

以此类推,每一次随机范围的均值是相等的。

  1. 缺点:除了最后一次,任何一次抢到的金额都要小于人均金额的两倍,并不是任意的随机。

相关文章

  • PHP二倍均值法实现随机红包算法

    说明: 公式:(0, M/N * 2),M为剩余红包金额,N为剩余人数,这个公式,保证了每次随机金额的平均值是相等...

  • 关于红包分配的问题

    方法1:二倍均值法 剩余红包金额为M,剩余人数为N,那么有如下公式:每次抢到的金额 = 随机区间 (0, M / ...

  • 二倍均值--红包算法

    发出一个固定金额的红包,由若干个人来抢,需要满足哪些规则? 1.所有人抢到金额之和等于红包金额,不能超过,也不能少...

  • 2018-12-21php红包分发算法

  • 微信红包算法-二倍均值法

  • PHP随机红包算法

    随机红包算法就是给定一个具体的红包金额,具体的红包个数,还有给定红包的最大金额和最小金额,按照业务可以分成两种,一...

  • 抢红包算法

    今天分享一篇有趣的抢红包算法,基本原理就是“二倍均值”,简单说,也就是一个公式,在这里,令P为人数,M为红包总金额...

  • 微信红包随机算法初探

    本文简书备份地址:微信红包随机算法初探 最近看了一篇文章,讲微信红包随机算法的。感觉很不错,所以自己实现了下,并进...

  • 红包随机算法Java实现

    需求:红包总金额随机后每份金额:最大值200, 最小值0.01;最大份数100;工具:idea参考:微信红包算法以...

  • PHP随机红包

网友评论

      本文标题:PHP二倍均值法实现随机红包算法

      本文链接:https://www.haomeiwen.com/subject/juzynctx.html