問題は、質問の文言が言うボウリングシステムです:
アプリケーションは、ノックダウンされたピンの数をランダムに選択し、7、8、9、および 10 番のチャンスが 2 倍になります。
私が実装した方法は次のようなものです
だから私はこのようなものを思いついた:
pins = [0,0,0,0,0,0,0,0,0,0] // (1 for pin knocked down / 0 for pin standing)
for(i=0; i<pins.length; i++)
if(pins[i]==0): //pin isn't already down
if(i<6)
if(random(0~100) < 50):
pins[i] = 1 //knock down
else
if(random(0~100) < 66):
pins[i] = 1 //knock down
ex: [0,1,0,1,0,0,1,1,1,1] // 6 pins knocked down.
したがって、ピン 0 ~ 6 に対しては 1/2 の確率を、ピン 7 ~ 9 に対しては 2/3 の確率を実行し、配列からすべての要素を合計して、多くのピンがドロップされたことを確認しました。
しかし、ストライクもゼロも得られないことに気付いたので、これは間違っているのではないかと思い始めました。
すべてのピンに同じチャンスがあるとしましょう。pinsDropped = random(0,10) を実行するだけで、最終的にストライク (10) 9% の確率と 0 個のピンのドロップが得られます。しかし、ドロップされる可能性が 2 倍になるピンが 4 つあります。
私が間違っていることは何ですか?
アップデート:
はい、私は確率が苦手です。他の人と話した後、私は質問文を読むのも苦手だと指摘されました。私は問題を完全に誤解しました。と言うrandomly choose the number of pins knocked down
とdouble the chance to numbers 7,8,9,10
。
つまり、6ピンよりも10ピンを倒す可能性が高いということです。
7ピン、8ピン、9ピン、10ピン。ピン 7、ピン 8、ピン 9、ピン 10 ではありません。
私は自分の愚かさに完全にイライラしています。
だから私はこれを非常に複雑にしました。
function try(pins, prob) {
if (prob > pins)
prob = pins;
aleat = mt_rand(0, pins+prob);
if (aleat > pins)
aleat -= prob;
return aleat;
}