|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- <?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份
- * @param int $number 切的数值
- * @param int $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
- (
- [0] => 3
- [1] => 3
- [2] => 3
- [3] => 3
- [4] => 2
- [5] => 2
- [6] => 2
- [7] => 2
- )
复制代码 PHP实现最近似的分配法 |
|