PHP指定人数随机平均分配指定金额(伸缩法)

/**将一个数分成指定份数
 * @param $money_total
 * @param $num
 * @return array
 */
function cuttingNumber($money_total,$num){

    //随机生产$num个随机数
    $randArr = [];
    for ($i = 0;$i<$num;$i++){
        array_push($randArr,rand(100,200));
    }
    $randArrSum = array_sum($randArr);
    $n = $randArrSum/100;
        for ($i = 0;$i<count($randArr);$i++){
            $randArr[$i] = bcdiv($randArr[$i],$n,2);
        }
    $randArrSum = array_sum($randArr);
    if($randArrSum>100){
        $m = $randArrSum-100;
        //给最大一个值减去$m
        rsort($randArr);
        $randArr[0]-=$m;
    }else{
        $m = 100-$randArrSum;
        //给最小一个值加上$m
        sort($randArr);
        $randArr[0]+=$m;
    }
    $result = [];
    for($i=0;$i<$num;$i++){
        array_push($result,bcmul(bcdiv($randArr[$i],100,2),$money_total,2));
    }
    $resultSum = array_sum($result);
    if($resultSum>$money_total){
        $m = $resultSum-$money_total;
        //给最大一个值减去$m
        rsort($result);
        $result[0]-=$m;
    }else{
        $m = $money_total-$resultSum;
        //给最小一个值加上$m
        sort($result);
        $result[0]+=$m;
    }
    shuffle($result);
    return $result;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

P P PHP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值