Как мне симулировать три броска монеты десять тысяч раз? - PullRequest
0 голосов
/ 25 января 2019

Я новичок в R, и я хотел имитировать подбрасывание трех монет до тех пор, пока только одна монета не будет иметь другой результат, чем две. Тогда я хочу попробовать этот тест 10000 раз. Однако, когда я запускаю свой код, значок загрузки запускается бесконечно после того, как я получаю этот вывод:

  • [1] "OOF"
  • [1] 0
  • [1] "OOF"
  • [1] 0
  • [1] "OOF"
  • [1] 0

Это мой код:

aWins <- 0
bWins <- 0
cWins <- 0
totalWins <- 0

a <- 0
b <- 0
c <- 0

while(totalWins < 10000){
    while(a == b && b == c){
        a <- sample(0:1, 1)
        b <- sample(0:1, 1)
        c <- sample(0:1, 1)

        print("OOF")

        if(a != b && b == c){
            aWins <- aWins + 1  
        }

        if(b != a && a == c){
            bWins <- bWins + 1
        }

        if(c != b && b == a){
            cWins <- cWins + 1
        }

    print(totalWins)
    totalWins <- aWins + bWins + cWins
    }
}
print("A wins: " + aWins)
print("B wins: " + bWins)
print("C wins: " + cWins)
print("Total wins: " + totalWins)

1 Ответ

0 голосов
/ 25 января 2019

Я думаю, что ваша логика зацикливания нарушена

Проблема: Вы продолжаете зацикливаться, пока количество выигрышей не превысит 10000, но это не означает 10000 игр, потому что игры, в которых все монеты равны, не учитываются, поэтому выПридется перевернуть гораздо больше, чем на 10 тысяч, чтобы достичь победы.

Решение: Я думаю, что если вы, если, если на самом деле должно быть, если еще, если еще, с остальным "никто не выиграл" и счетчик отслеживает, так что общее количество выигрышей составляет + b + c + никто.

Редактировать: из названия вопроса я подумал, что вы хотите сделать 10k переворотов, но затем перечитать тело, и кажется, что игра «переворачивается, пока один не другой», и в этом случае логика подсчета в порядке

Проблема: вы на самом деле подбрасываете свои монеты только в том случае, если все они являются головами или всеми хвостами (вторая в то время как петля) - как только одна монета переворачивается в отличие от других (единственный способ выиграть игру для этой монеты)внутренний цикл перестанет работать, переворотов больше не будет, вы никогда не достигнете 10к.

Решение: Избавьтесь от этого внутреннего цикла while и поместите вместо него код во внешний цикл, ИЛИ сбросьте значения ab и c, чтобы они были одинаковыми между двумя операторами while, чтобы внутренний цикл имелшанс побежать, когда результатом броска является выигрыш одной из монет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...