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

基于R语言模拟估算集齐两枚骰子所有和值的预期投掷次数

用R语言模拟集齐骰子所有和的预期投掷次数

核心思路

要估算预期投掷次数,需要模拟多轮“投掷骰子直到集齐2-12所有和”的过程:

  • 每一轮单独模拟,记录该轮需要的投掷次数
  • 对所有轮次的次数取平均值,就是预期次数

你的原代码是批量生成大量单次投掷,但没有追踪“集齐所有和”的完整过程,所以需要调整为逐轮模拟的逻辑。

实现代码

1. 定义单次模拟函数

这个函数会模拟一轮从开始投掷到集齐所有和的过程,返回该轮的投掷次数:

simulate_one_run <- function() {
  collected_sums <- integer(0)  # 存储已出现的和
  toss_count <- 0  # 记录投掷次数
  
  # 循环直到集齐2-12的所有11个和
  while (length(unique(collected_sums)) < 11) {
    # 投掷两枚骰子并计算和
    current_sum <- sample(1:6, 1) + sample(1:6, 1)
    collected_sums <- c(collected_sums, current_sum)
    toss_count <- toss_count + 1
  }
  
  return(toss_count)
}

2. 重复模拟并计算预期值

通过replicate重复运行单次模拟函数,得到大量轮次的结果后取平均值:

# 模拟10000次(次数越多,结果越接近真实预期值)
n_simulations <- 10000
all_toss_counts <- replicate(n_simulations, simulate_one_run())

# 计算预期投掷次数
expected_value <- mean(all_toss_counts)
cat("估算的预期投掷次数:", round(expected_value, 2), "\n")

# 可选:查看次数的分布情况
hist(all_toss_counts, 
     main = "集齐所有和的投掷次数分布",
     xlab = "单次轮次的投掷次数",
     col = "lightblue")

结果说明

  • 模拟次数越多,平均值越接近理论预期值(理论值大约在61次左右,模拟结果会围绕这个值波动)
  • 你可以调整n_simulations的大小,比如增加到20000次,结果会更稳定

内容的提问来源于stack exchange,提问作者Renee Ofadu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:50:46