抢红包之二倍均值法

/**
 * 二倍均值法
 *
 * @param $nums  //分配人数
 * @param $money //分配金额
 * @return array
 */
function assignRedBag($nums,$money){

    $result = [];//分配结果

    $surplusMoney = $money;//剩余金额

    for ($i=0;$i<$nums;$i++){
        //最后一次分配,直接返回剩余金额
        if($i+1 == $nums){
            $result[] = $surplusMoney;
            break;
        }

        //每次分配的最大值,剩余金额 / 剩余分配人数 * 2倍
        $max = intval($surplusMoney / ($nums - $i) * 2);
        //随机分配
        $nowMoney = mt_rand(1,$max);
        //存入分配结果
        $result[] = $nowMoney;
        //计算剩余money
        $surplusMoney = $surplusMoney - $nowMoney;

    }

    return $result;
}

echo '<pre>';
print_r(assignRedBag1(10,100));
分类:   程序积累  / 
标签:   抢红包
 /  浏览量:  18594
2022-4-2 16:59 Saturday