php比例分配,根据人数随机分配百分比的问题

需求是这样的,根据可变参数 $people 来给每个人随机分配百分比,条件是人数一定会控制在 3 < N < 100,弱条件是尽量保证每个人分配到的比例在 30% 一下,不会出现极值。

写了个简单的分配,但会出现最后一个人会得到很多的情况,并且由于分配区间实际上是 1 - 平均数 之间的百分比,不是严格意义上的 “随机平均分配”,求各位大大给个思路,抛砖引玉,不甚感谢。

$people = 3; //人数 $percent = 100; //百分比 $average = floor($percent/$people); $rand_array = array(); $count = 0; for ($i=0; $i < $n; $i++) { if($i == ($n - 1)){ $rand_array[$i] = 100 - $count; }else{ $rand_array[$i] = rand(1,$average); $count = $count + $rand_array[$i]; } } return $rand_array;

回复讨论(解决方案)

这样可能好点$people = 3; //人数$percent = 100; //百分比$res = array_fill(0, 3, floor($percent/$people)); //平均分配$d = 5; //容差foreach($res as &$v) $v += rand(-$d, $d);$res[rand(0, $people-1)] += $percent - array_sum($res); //随机将残差补入print_r($res);

忘记上来结贴了,感谢版主大大的回复,问题已经解决了,贴出来与大家分享:public static function rand_bouns($person){//百分比$percent = 100;$now_person = $person;$bouns = array();for($i=0;$i<=$person-1;$i++){$bouns[$i] = self::get_bouns($now_person,$percent);$percent = $percent - $bouns[$i];$now_person = $now_person - 1;$now_bouns += $bouns[$i];}return $bouns;}public static function get_bouns($person,$percent){if($person==1) return $percent;$max = 30;if($percent < $max) $max = $percent;$min = $percent-$max*($person-1) <= 0 ? 1 : $percent-$max*($person-1);$max = $max-($person) <= 0 ? 1 : $max-($person);return rand($min,$max);}

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值