<?php
//人数
$member = 50;
//奖金池
$moneyPool = 10000;
/**
* @param $member 人数
* @param $moneyPool 奖金池
* @return array 钱数
*/
function test($member,$moneyPool){
$a = array();
//算出每个人的浮动比率
for ($i=0; $i <$member ; $i++) {
$float_true = randomFloat();
array_push($a,$float_true);
}
//算出平均值
$avg = $moneyPool/$member;
$money_list = array();
$sum = '';
foreach ($a as $key => $value) {
//每个人分到的人民币
$money = $value*$avg*0.1;
array_push($money_list,$money);
$sum += $money;
}
echo '<pre>';
// print_r($money_list);
// print_r($sum);
//自动分配的钱数总和如果大于奖金池
//重构每个人分到的钱
$money_list_2 = array();
$sum_2 = '';
// if ($sum-$moneyPool > 0) {
$diff_sum = $sum-$moneyPool;
$avg_money = $diff_sum/$member;
// echo '<br>$avg_money'.$avg_money.'<br>';
//重构每个人分到的钱,确保总和和奖金池一致
foreach ($money_list as $key => $value) {
//每个人分到的人民币
$res_mon = $value - $avg_money;
// echo '<br>$value'.$value;
// echo '<br>$avg_money'.$avg_money;
// echo '<br>$res_mon'.$res_mon;
array_push($money_list_2,$res_mon);
$sum_2 += $res_mon;
}
$moneyMax2 = maxTwo($money_list_2);
//除去金额最高的两人,找出剩下的
$be_left = array_diff($money_list_2,$moneyMax2);
$member = $member - 2;
//总奖金池/人数 .每个人拿出5%给最高的2个人
$avg = $avg*0.10;
foreach ($be_left as $key => &$value) {
$value = $value-$avg;
}
//每个人减少了5% 算出一共减去的
$diff_sum = $member*$avg;
//把匀出来的钱分给最高的2个人
$money_max2_t=array();
array_push($money_max2_t,$moneyMax2[0]+$diff_sum*0.35);
array_push($money_max2_t,$moneyMax2[1]+$diff_sum*0.65);
$result_list = array_merge($money_max2_t,$be_left);
$sum_t = 0;
foreach ($result_list as $key => &$value) {
$sum_t += $value;
$value = number_format($value,2);
}
return $result_list;
}
//封装保留2位小数点的函数
function randomFloat($min = 8, $max = 15) {
$num = $min + mt_rand() / mt_getrandmax() * ($max - $min);
return number_format($num, 2);
}
//封装找出钱最高的2个人
function maxTwo($arr){
$maxTwoMoney = array();
array_push($maxTwoMoney,max($arr));
$arr = array_diff($arr,array(max($arr)));
array_push($maxTwoMoney,max($arr));
return $maxTwoMoney;
}
print_r(test($member,$moneyPool));
打卡分钱项目,关于每个人分钱的方法
最新推荐文章于 2020-06-11 15:29:35 发布