5张牌扑克手牌四条概率计算:R语言100次模拟实现问询
用R语言模拟计算扑克手牌四条的概率
一、理论概率回顾
你提供的理论计算代码是通过组合数直接推导四条的概率,核心逻辑是:从13种牌面值选1种,取该面值全部4张牌,再从剩余48张牌选1张,最后除以52选5的总组合数。可以用R内置的choose()函数简化代码:
# 理论概率计算 theoretical_prob <- choose(13, 1) * choose(4, 4) * choose(48, 1) / choose(52, 5) cat("理论概率:", round(theoretical_prob * 100, 4), "%\n")
二、100次模拟的实现步骤
模拟的核心思路是重复随机抽牌、判断牌型、统计次数,具体代码如下:
步骤1:构造扑克牌
用数字1-13代表A到K的牌面值,每种面值重复4次模拟4种花色:
# 构造完整牌组:1-13对应A-K,每种面值4张 deck <- rep(1:13, each = 4)
步骤2:执行模拟
循环100次,每次抽取5张无放回的牌,判断是否为四条(即某一面值出现4次):
# 模拟次数 n_sim <- 100 # 初始化四条出现次数计数器 four_count <- 0 for (i in 1:n_sim) { # 随机抽5张牌 hand <- sample(deck, size = 5, replace = FALSE) # 统计各面值出现次数 value_counts <- table(hand) # 判断是否存在出现4次的面值 if (any(value_counts == 4)) { four_count <- four_count + 1 } } # 计算模拟概率 sim_prob <- four_count / n_sim cat("100次模拟得到的概率:", round(sim_prob * 100, 4), "%\n")
三、注意事项
- 四条的理论概率仅约0.024%,100次模拟大概率会出现0次四条的情况,导致模拟结果为0。若要得到更接近理论值的结果,建议将模拟次数提升至10万次以上。
sample(deck, 5, replace=FALSE)模拟真实无放回发牌逻辑,确保每次抽牌符合实际规则。
内容的提问来源于stack exchange,提问作者QZhu
相关产品推荐
相关产品推荐

