我是R的初学者,我想模拟三个硬币的抛硬币,直到只有一个硬币的结果与两个硬币不同。然后我要尝试此测试10000次。但是,当我运行代码时,在获得以下输出后,加载图标将无限期运行:
这是我的代码:
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)
答案 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值重置为相同,以便内部循环有机会运行翻盖的结果再次赢得其中一个硬币