2

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

4

2 回答 2

21

这是一个简单的解决方案:

rand(3) + 3*(rand(3) - 1)

您想要这样做的原因是它提供了从 1 到 9 的所有可能值的均匀分布。

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

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

于 2012-08-12T04:17:55.797 回答
1

使用 rand(3) 两次,可以生成 3^2 对整数,即 (1,1), (1,2), ..., (3,3)。将每一对分配给值 [1,9] 之一(例如 (1,1) 到 1,(1,2) 到 2 等)将为您提供 rand(9)。象征性地:rand(9):=(rand(3),rand(3))。

于 2012-08-13T04:21:51.777 回答