fork download
  1. <?php
  2. function divideEqualSum($in, $p = 2){
  3. $out = array_fill(0, $p, []);
  4. rsort($in, SORT_NUMERIC);
  5. foreach ($in as $v){
  6. usort($out, function($a, $b){
  7. return array_sum($a) > array_sum($b);
  8. });
  9. $out[0][] = $v;
  10. }
  11. return $out;
  12. }
  13. $arr = [1,4,5,9,1,2,2,3];
  14. echo 'Две части', PHP_EOL;
  15. print_r( divideEqualSum($arr) );
  16. echo 'Три части', PHP_EOL;
  17. print_r( divideEqualSum($arr, 3) );
  18. echo 'Четыре части', PHP_EOL;
  19. print_r( divideEqualSum($arr, 4) );
Success #stdin #stdout 0.01s 24448KB
stdin
Standard input is empty
stdout
Две части
Array
(
    [0] => Array
        (
            [0] => 5
            [1] => 4
            [2] => 2
            [3] => 2
            [4] => 1
        )

    [1] => Array
        (
            [0] => 9
            [1] => 3
            [2] => 1
        )

)
Три части
Array
(
    [0] => Array
        (
            [0] => 4
            [1] => 3
            [2] => 1
            [3] => 1
        )

    [1] => Array
        (
            [0] => 5
            [1] => 2
            [2] => 2
        )

    [2] => Array
        (
            [0] => 9
        )

)
Четыре части
Array
(
    [0] => Array
        (
            [0] => 3
            [1] => 2
            [2] => 1
        )

    [1] => Array
        (
            [0] => 5
            [1] => 1
        )

    [2] => Array
        (
            [0] => 4
            [1] => 2
        )

    [3] => Array
        (
            [0] => 9
        )

)