元の投稿は閉鎖されました。得られる結果が完璧ではないだけで、最大値 999 が常に過剰に繰り返されるため、ランダムさが足りず、少し偽物のように見えます。
http://bbs.csdn.net/topics/391814341
$r = foo(32898, 53);echo array_sum($r), PHP_EOL; //验证总和print_r(array_count_values($r)); //查看分布function foo($num, $k, $min=1, $max=999) { $res = array_fill(0, $k, 1); do { for($i=0; $i<$k; $i++) { $sum = array_sum($res); $t = rand(0, $max - $min); if($res[$i] + $t > $max) $t = $max - $res[$i]; if($sum + $t > $num) $t = $num - $sum; $res[$i] += $t; } }while($num > $sum); return $res;}
$t = rand(0, $max - $res[$i]); に変更します。
このディストリビューションは非常に良いものになるはずです