Random 使用rand(3)生成rand(9)

Random 使用rand(3)生成rand(9),random,probability,Random,Probability,有一个函数rand(3),它生成从1到3的随机整数。使用此函数,构造另一个函数rand(9),它生成从1到9的随机整数。下面是一个简单的解决方案: rand(3) + 3*(rand(3) - 1) 您希望这样做的原因是,它为从1到9的所有可能值提供了均匀分布 有些人可能只想做rand(3)*rand(3),但这实际上并不会产生一些数字,例如7。它也不均衡地分配它产生的数字 类似地,有些人可能会做rand(3)+rand(3)+rand(3),但这也不会生成所有的数字(它永远不会生成1或2),

有一个函数rand(3),它生成从1到3的随机整数。使用此函数,构造另一个函数rand(9),它生成从1到9的随机整数。

下面是一个简单的解决方案:

rand(3) + 3*(rand(3) - 1)
您希望这样做的原因是,它为从1到9的所有可能值提供了均匀分布

有些人可能只想做
rand(3)*rand(3)
,但这实际上并不会产生一些数字,例如7。它也不均衡地分配它产生的数字


类似地,有些人可能会做
rand(3)+rand(3)+rand(3)
,但这也不会生成所有的数字(它永远不会生成1或2),并生成其他频率不成比例的数字(5生成的频率远高于9)。

使用rand(3)两次,就可以生成3^2对整数,即(1,1)。。。, (3,3). 将每一对分配给[1,9]中的一个值(例如,(1,1)到1,(1,2)到2等)将得到rand(9)。象征意义:兰德(9):=(兰德(3),兰德(3))。

这是你大学课本上的一个问题的标题吗?
兰德(3)+兰德(3)+兰德(3)
?@Shubham这将如何产生1的结果?@Shubham:
rand(3)
[1,3]
区间内生成整数,因此添加三个整数将得到
[3,9]
,而不是
[1,9]
。啊,只是错过了。这些问题看起来很容易,但如果你仔细分析它,就会发现很多问题。你有证据证明你的解决方案是均匀分布的吗?@Dani it将输出空间分成3个大小相等的块(后半部分就是这样做的),然后从其中一个块中平均选取一个元素(前半部分就是这样做的). 每个区块有1/3的机会被选中,每个区块中的每个项目有1/3的机会被选中,因此每个项目总体上有1/9的机会被选中。这是正确的,但如Amber所建议的,使用base-3分解是一个更完整的答案。