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

R语言修改抛硬币模拟代码统计首次出现HTH序列所需次数

R代码实现方案

核心模拟代码

以下代码完全匹配你的需求,不需要手动重复模拟、合并数据或导入Excel计算,全程自动执行:

# 定义单次模拟函数:返回首次出现HTH序列的run编号
simulate_single <- function() {
  run_count <- 0
  # 无限循环直到命中HTH序列自动停止
  while(TRUE) {
    run_count <- run_count + 1
    # 单次run:抛3次硬币,概率和你设定一致
    tosses <- sample(c("H", "T"), size = 3, replace = TRUE, prob = c(0.05, 0.95))
    # 判断当前run的结果是否为HTH序列
    if (identical(tosses, c("H", "T", "H"))) {
      return(run_count)
    }
  }
}

# 设置随机种子保证结果可复现,不需要可以删掉这行
set.seed(123)
# 重复执行100次模拟,自动汇总所有结果
n_sim <- 100
run_results <- replicate(n_sim, simulate_single())
# 计算总抛币次数(每个run对应3次抛币)
toss_results <- run_results * 3

结果统计

直接调用基础函数即可得到你需要的三个指标:

# 1. 观测到HTH序列前最少抛币次数
min_toss <- min(toss_results)
# 2. 观测到HTH序列前平均抛币次数
mean_toss <- mean(toss_results)
# 3. 观测到HTH序列前最多抛币次数
max_toss <- max(toss_results)

# 打印结果
cat("最少抛币次数:", min_toss, "\n")
cat("平均抛币次数:", round(mean_toss, 2), "\n")
cat("最多抛币次数:", max_toss, "\n")

可视化绘制

基础直方图(和你提供的示例逻辑完全一致)

hist(run_results, main = "Number of Runs before HTH", xlab = "Run编号", col = "lightblue", border = "white")

ggplot2版本直方图

library(ggplot2)
ggplot(data.frame(run_num = run_results), aes(x = run_num)) +
  geom_histogram(fill = "steelblue", alpha = 0.7, bins = 15) +
  labs(title = "首次出现HTH序列所需Run数分布", x = "Run编号", y = "频数") +
  theme_minimal()

可选逻辑调整:如果你需要判定跨run的连续三次抛币也属于命中(即不按独立run判断,只要全局出现连续三次HTH就停止),可以替换单次模拟函数为以下版本,直接返回总抛币次数,不需要额外乘3:

simulate_single_continuous <- function() {
  all_tosses <- c()
  while(TRUE) {
    all_tosses <- c(all_tosses, sample(c("H", "T"), size = 1, prob = c(0.05, 0.95)))
    if (length(all_tosses) >=3 && identical(tail(all_tosses, 3), c("H","T","H"))) {
      return(length(all_tosses))
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:36:00