You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:20:57