慕标琳琳
$cash = 40;
$user_arr = array(6,6,6,6,6,6,6,6,6,6);
while($cash>0){
$user_id = rand(0, 9);
if($user_arr[$user_id]<12){
$user_arr[$user_id]++;
$cash--;
}
}
;
var_dump($user_arr,array_sum($user_arr));die;性能篇
$arr1=range(2,6);
shuffle($arr1);
$arr2=range(2,6);
shuffle($arr2);
$user_arr = array(6,6,6,6,6,6,6,6,6,6);
for ($i=0;$i<10;$i++){
if($i<=4){
$user_arr[$i] += $arr1[$i];
}else{
$j = $i%5;
$user_arr[$i] += $arr2[$j];
}
}
var_dump($user_arr,array_sum($user_arr));die;
阿波罗的战车
我写了个思路迥异的。。。感觉有点麻烦,不过效率和可扩展性还凑合。思路:每次分配后,都确定剩余的金钱在合理范围。若合理,进行下次分配否则,重新进行此次分配。<?phpfunction hongbao($money, $people, $min, $max){
$result = [];
for ($i=0; $i < $people; $i++) {
do { // 1.进行本次分配
$result[$i] = mt_rand($min*100, $max*100) / 100;
// 2.本次分配后,剩余人数
$restPeople = $people - ($i+1);
// 3.本次分配后,剩余金钱
$restMoney = $money - array_sum(array_slice($result, 0, $i+1));
// 4.本次分配后,剩余金钱是否在合理范围? 不在则重新分配
}
while ($restMoney > $restPeople * $max || $restMoney < $restPeople * $min);
}
return $result;
}
$result = hongbao(100, 10, 6, 12);
// 验证
var_dump($result);
var_dump(array_sum($result));运行结果: