PHPIN.NET

 找回密码
 立即注册
查看: 5032|回复: 0

[技巧手记] PHP最优整数均分算法

[复制链接]

469

主题

31

回帖

5569

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5569
发表于 2020-7-15 23:17:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. <?php
  2. /*
  3. * @最优整数均分算法
  4. * @param int $number 待平分的数字
  5. * @param int $taotl 平分总个数
  6. */
  7. function getDivideNumber($number, $total) {
  8.     $divide_number  = bcdiv($number, $total);    // 除法取平均数
  9.     $last_number = bcsub($number, $divide_number * $total);    // 获取剩余
  10.     $number_str = str_repeat($divide_number.'|', $total - $last_number);    // 拼装平分后的数据
  11.     $number_str2 = str_repeat(($divide_number + 1).'|', $last_number);    // 拼装剩下的分配
  12.     $number_str = $number_str2 . $number_str;    // 组合
  13.     return explode('|', trim($number_str, '|')); // 去掉前后多余的分隔符 返回数组
  14. }
  15. $arr = getDivideNumber(20, 8);
  16. print_r($arr);
复制代码


算法实现2:
  1. /**
  2. * 将一个数值切成N份
  3. * @param  int $number    切的数值
  4. * @param  int $avgNumber 份数
  5. * @return array
  6. */
  7. function numberAvg($number, $avgNumber)
  8. {
  9.         if($number == 0) {
  10.                 $array = array_fill(0, $avgNumber, 0);
  11.         } else {
  12.                 $avg     = floor($number / $avgNumber);
  13.                 $ceilSum = $avg * $avgNumber;
  14.                 $array   = [];
  15.                 for($i = 0; $i < $avgNumber; $i++) {
  16.                         if($i < $number - $ceilSum) {
  17.                                 array_push($array, $avg + 1);
  18.                         } else {
  19.                                 array_push($array, $avg);
  20.                         }
  21.                 }
  22.         }
  23.         return $array;
  24. }

  25. print_r(numberAvg(20, 8));
复制代码

以上代码执行结果为:
  1. Array
  2. (
  3.     [0] => 3
  4.     [1] => 3
  5.     [2] => 3
  6.     [3] => 3
  7.     [4] => 2
  8.     [5] => 2
  9.     [6] => 2
  10.     [7] => 2
  11. )
复制代码
PHP实现最近似的分配法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|PHPIN.NET ( 冀ICP备12000898号-14 )|网站地图

GMT+8, 2024-10-25 19:40

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表