例えば10000円を支払わなければならない状況で、毎月ある金額を3ヶ月に渡って分割して支払いたいときなどは、そのまま3で割ってしまうと少数になって困ってしまいます。 そんな時のための整数分割アルゴリズムです。
以下のコードでは$dividend
を$n
個の整数に分割します。
function partition($dividend, $n){ // 整数分割アルゴリズム $base = floor($dividend / $n); // 最低の配当 $rem = $dividend % $n; // あまり $list = []; for($i = 0; $i < $n; $i ++){ $list[] = ($i < $rem) ? $base + 1 : $base; } return $list; }
上の例だと以下が出力されます。
( [0] => 334 [1] => 333 [2] => 333 )