PHP最优整数均分算法
<?php/*
* @最优整数均分算法
* @param int $number 待平分的数字
* @param int $taotl 平分总个数
*/
function getDivideNumber($number, $total) {
$divide_number= bcdiv($number, $total); // 除法取平均数
$last_number = bcsub($number, $divide_number * $total); // 获取剩余
$number_str = str_repeat($divide_number.'|', $total - $last_number); // 拼装平分后的数据
$number_str2 = str_repeat(($divide_number + 1).'|', $last_number); // 拼装剩下的分配
$number_str = $number_str2 . $number_str; // 组合
return explode('|', trim($number_str, '|')); // 去掉前后多余的分隔符 返回数组
}
$arr = getDivideNumber(20, 8);
print_r($arr);
算法实现2:
/**
* 将一个数值切成N份
* @paramint $number 切的数值
* @paramint $avgNumber 份数
* @return array
*/
function numberAvg($number, $avgNumber)
{
if($number == 0) {
$array = array_fill(0, $avgNumber, 0);
} else {
$avg = floor($number / $avgNumber);
$ceilSum = $avg * $avgNumber;
$array = [];
for($i = 0; $i < $avgNumber; $i++) {
if($i < $number - $ceilSum) {
array_push($array, $avg + 1);
} else {
array_push($array, $avg);
}
}
}
return $array;
}
print_r(numberAvg(20, 8));
以上代码执行结果为:Array
(
=> 3
=> 3
=> 3
=> 3
=> 2
=> 2
=> 2
=> 2
)
PHP实现最近似的分配法
页:
[1]