ホームページ  >  記事  >  バックエンド開発  >  n 個の数値の合計は 32898 であることが知られています。各加数を見つけて、完全なバージョンを見つけてください。

n 個の数値の合計は 32898 であることが知られています。各加数を見つけて、完全なバージョンを見つけてください。

WBOY
WBOYオリジナル
2016-06-23 13:27:551082ブラウズ

元の投稿は閉鎖されました。得られる結果が完璧ではないだけで、最大値 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 - $min);

$t = rand(0, $max - $res[$i]); に変更します。
このディストリビューションは非常に良いものになるはずです

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。