首页 > 解决方案 > r代码用于滚动n骰子并消除

问题描述

我正在尝试为这个挑战编写一个 r 代码:假设我们掷 n 个骰子,删除所有出现 1 的骰子,然后再次掷出其余的骰子。如果我们重复这个过程,最终所有的骰子都会被淘汰。平均而言,我们将制作多少卷?这是我到目前为止尝试过的,但它不起作用。5个骰子的教科书理论答案是13.02

代码尝试

N=10000
myfun <- function(...) {
  for(i in list(...)){
  num=1
  S=sample(1:6,i,replace = TRUE)
  i=i-length(which(S==1))
  while(i!=0){
    i=i-length(which(S==1))
    num=num+1
  }
  result[i]=num
}

}

replicate(N,myfun(1:100))

标签: r

解决方案


这是一个工作脚本,它计算必须掷骰子多少次才能生成六个值中的每一个:

numRolls <- function() {
    cnt <- 0
    x <- c(1:6)
    while (length(x) > 0) {
        rand <- sample(1:6,1,replace = TRUE)   # generate random value 1 to 6
        x <- x[which(x!=rand)]                 # remove this value if not yet seen
        cnt <- cnt + 1                         # increment number of rolls
    }

    return(cnt)
}

totalRolls <- 0

for (i in 1:1000) {
    totalRolls <- totalRolls + numRolls()
}

totalRolls / 1000
[1] 14.819

我进行了 1000 次测试,得到了14.819覆盖骰子上每个值所需的平均滚动次数。


推荐阅读