司会者への注意:これは宿題ではありません。PHP:等しい確率で変数に値を分配する方法は?
私は、次の例があります。
$points = 10;
$a = 0;
$b = 0;
$c = 0;
$d = 0;
私は$の点がゼロになるまでランダムに($、$ bのは、$ C、$ d)は変数にポイントを配布します。だから、いくつかの機能/スクリプトは次のようになります。実行した後にランダム出力を期待:
$points = 0;// Must be zero
$a = 3;
$b = 1;
$c = 0;
$d = 6;
私が従っているシンプルなソリューションを、やってと思っています:
while($points > 0) {
$points_taken = mt_rand(0, $points);
$points -= $points_taken;
$a += $points_taken;
$points_taken = mt_rand(0, $points);
$points -= $points_taken;
$b += $points_taken;
$points_taken = mt_rand(0, $points);
$points -= $points_taken;
$c += $points_taken;
$points_taken = mt_rand(0, $points);
$points -= $points_taken;
$d += $points_taken;
}
関数が1つの問題があります$ aはそれがリストの最初のものであるため、より多くのポイント(またはすべてのポイント)を取る可能性がはるかに高くなります。$ dはリストの最後であるため、ポイントを取る可能性がずっと高くなります。
質問:すべての変数に均等に分配する方法を教えてください。
注:変数のいずれかがすべての点を取った場合は問題ありません。
アレイ内で動作し、http://php.net/array_randをご覧ください。 – Calimero
最後に$ pointsを0に設定する必要がありますか? – Manav
@Manav必ずしもそうではありませんが、私は10点すべてを配布することを望みます。 – evilReiko