使用R语言模拟概率:移除梅花9后1000局牌局获胜次数统计
问题分析与代码修正
你的代码存在两个核心问题,导致无法正确模拟目标游戏场景:
1. 牌组定义错误
你错误地用reds[-9]来表示缺少梅花9的黑牌,但reds是红牌数组(rep(1:13,2)生成的是红桃+方块的26张牌),reds[-9]只是移除了红牌数组的第9个元素(实际是点数5),完全不符合「黑牌少一张梅花9」的设定。
正确的黑牌应该是:原本包含黑桃+梅花各1-13(共26张),移除梅花9后,点数9只剩1张,其他点数各2张。可以这样定义:
# 定义红牌(红桃+方块,各1-13,共26张) reds <- rep(1:13, 2) # 定义黑牌(黑桃+梅花,移除1张9,共25张) blacks <- rep(1:13, 2) # 移除其中一个9(对应梅花9) blacks[which(blacks == 9)[1]] <- NULL
2. 逻辑表述易混淆
虽然原代码中sample(...) < sample(...)的求和逻辑是对的(黑牌点数 < 红牌点数即你获胜),但变量命名混乱会导致后续维护出错,建议明确抽样对象。
修正后的完整代码
# 定义牌组 reds <- rep(1:13, 2) # 你的红牌:26张 blacks <- rep(1:13, 2) blacks[which(blacks == 9)[1]] <- NULL # 对方的黑牌:少1张梅花9,共25张 # 模拟1000局游戏 n <- 1000 # 每次从双方牌组各抽1张,统计红牌点数 > 黑牌点数的次数 win_count <- sum(sample(reds, n, replace = TRUE) > sample(blacks, n, replace = TRUE)) # 输出结果 cat("你获胜的次数:", win_count, "\n")
代码说明
replace = TRUE表示每次抽样后放回,符合「每局重新抽一张」的游戏规则;sum(红牌 > 黑牌)直接统计你获胜的局数,逻辑更清晰;- 黑牌的定义通过
which(blacks ==9)[1]精准移除一个9,避免了手动构造数组的繁琐。
内容的提问来源于stack exchange,提问作者Lincy
相关产品推荐
相关产品推荐

