【问题标题】:Number of Dice rolling till reaches a Stop Value掷骰子直到达到停止值的次数
【发布时间】:2015-06-18 07:24:15
【问题描述】:

我正在尝试计算掷骰子的次数,直到达到确定的停止值。例如,我希望停止值为 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

感谢任何帮助。

【问题讨论】:

  • 另外,您在调用sample 时不需要replace = TRUE 参数。您正在为循环的每次迭代执行对 sample 的全新调用。

标签: r while-loop dice


【解决方案1】:

在您当前的循环中,您在每次迭代时都用一个新值重写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)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-04
    • 2021-12-11
    • 2021-03-02
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多