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

如何在R中模拟掷骰子计算出现4后接6的平均投掷次数

R掷骰子游戏模拟的高效实现方案

核心逻辑说明

R没有内置do until语法,但可以通过repeat + break的组合实现完全等效的终止式循环逻辑,模拟过程不需要预先生成大量随机数,也无需导出到Excel手动统计,代码运行后可直接输出平均投掷次数。

完整实现代码

首先定义单轮试验的模拟函数:

# 单轮试验:掷骰子直到出现4后接6,返回总投掷次数
simulate_one_trial <- function() {
  prev_roll <- NA
  count <- 0
  repeat {
    current_roll <- sample(1:6, size = 1, replace = TRUE) # 直接模拟掷1个6面骰子
    count <- count + 1
    # 判断是否满足终止条件:前一次是4,当前是6
    if (!is.na(prev_roll) && prev_roll == 4 && current_roll == 6) {
      break
    }
    prev_roll <- current_roll
  }
  return(count)
}

然后重复试验100次计算平均值:

# 重复100次试验
trial_results <- replicate(100, simulate_one_trial())
# 计算平均投掷次数
avg_count <- mean(trial_results)
print(avg_count)

代码说明

  • 用sample(1:6,1)模拟掷骰子比floor(runif())更准确,不需要手动调整区间避免边界值误差
  • repeat循环会持续运行直到遇到break语句,完全匹配你需要的“直到出现4后接6停止”的逻辑
  • replicate函数自动批量执行指定次数的模拟,不需要手动定义上百个roll变量,也无需手动统计结果
  • 如果需要调整模拟次数,直接修改replicate的第一个参数即可,比如要跑1000次模拟就改为replicate(1000, simulate_one_trial())

补充:该问题的理论期望投掷次数为36,模拟次数越多,计算出的平均值会越接近36。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:24:02