直到达到停止值的骰子数量

时间:2015-04-13 03:55:21

标签: r while-loop dice

我正在尝试计算骰子数量,直到达到一个明确的停止值。例如,我希望停止值为100.我正在编写以下代码:

sumofsides <- function(stopvalue) {
  totalsum <- 0
  while (totalsum < stopvalue) {
    face <- sample(6, 1, replace= TRUE)
    totalsum <- totalsum + face
  }
  return(total value)
}

sumofsides(100)
[1] 103

当我编写以下代码时,获取滚动次数,直到达到停止值。但它总是给出1的值,这是错误的。

numofrolls <- function(stopvalue) {
  totalsum <- 0
  while (totalsum < stopvalue) {
    face <- sample(6, 1, replace= TRUE)
    totalsum <- totalsum + face
  }
  return(length(face))
}

numofrolls(100)
[1] 1

感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

在当前循环中,您将使用新值重写totalsum每次迭代,因此其长度永远不会超过一。一种解决方案是使用第二个变量来计算卷数:

rollUntil <- function(n) {
        nRolls   <- 0
        sumRolls <- 0
        while (sumRolls <= n) {
                sumRolls <- sumRolls + sample.int(6, 1)
                nRolls = nRolls + 1
        }
        return(nRolls)
}


# let's look at the distribution of rolls till 100:
hist(replicate(1000,rollUntil(100)))

enter image description here