打卡分钱项目,关于每个人分钱的方法

<?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));

猜你喜欢

转载自blog.csdn.net/helloworld_dream/article/details/80899520