如何模拟三万次硬币翻转?

时间:2019-01-25 06:18:41

标签: r

我是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 :(得分:1)

我认为您的循环逻辑已损坏

问题:您一直循环播放,直到获胜次数超过10000,但这并不代表10000场比赛,因为所有硬币都相等的游戏不计在内,因此您必须翻转10k以上才能获得胜利。

解决方案:我认为您的if if if if if else if else if else如果是else,则else为“ nobody won”,并且计数器跟踪该结果,因此总获胜人数为+ b + c +没人。

编辑:我想从问题的标题开始进行1万次翻转,但是然后重新读取正文,似乎游戏是“翻转直到一个不同”,在这种情况下,这种计数逻辑就可以了

问题:只有当硬币全是正面或反面时(第二个循环时),您才真正翻转硬币-一种硬币与其他硬币的翻转方式不同(游戏可以为该硬币获胜的唯一方法)循环将停止运行,不再发生翻转,您永远不会达到10k。

解决方案:摆脱内部的while循环,然后将代码放入外部的loop中,或者将两个while语句之间的ab和c值重置为相同,以便内部循环有机会运行翻盖的结果再次赢得其中一个硬币