【发布时间】:2017-09-20 17:52:33
【问题描述】:
假设我们有一个随机生成器函数rand5,它生成一个介于 1 和 5 之间的随机数,包括 1 和 5。我已经看到,如果你想用它来生成一个介于 1 和 7 之间的随机数,包括在内,你应该重复计算
(5 * (rand5() - 1) + rand5())
生成一个介于 1 到 30(含)之间的随机数,并重复此过程直到生成介于 1 到 21 之间的数字,然后取结果 mod 7。
为什么不直接使用这个公式直接计算 1 到 7 之间的随机数?
(rand5() + rand5() + rand5()) % 7 + 1
【问题讨论】:
-
因为
rand5() + rand5() - 3可以给-1? -
计算您可以使用表达式获得每个数字的次数(将每个值替换为 1-5 会给您 5*5*5=125 个表达式进行评估)。您甚至可以编写一个三重 for 循环来为您执行此操作。这应该可以很好地解释发生了什么。
-
@user3833308 那么
5 * rand5() + rand5()) - 1是如何生成 1,2,3,4 的呢? -
你真的应该在你的问题中从头开始解释这个问题。这对于不熟悉它的人来说非常神秘。
-
您还可以搜索掷 2 个骰子 时获得不同结果的概率 - 这是一个相当常见的示例,说明为什么添加均匀分布不会导致均匀分布。