0

基本上我必须使用一个随机函数,它可以返回一个介于 0 和 2^16-1 之间的数字。

我正在尝试利用它并生成 1 到 6 之间的 6 个间隔(考虑骰子扑克)。基本上使用为我随机生成的一个数字(我只能指定范围),最好只调用一次。然后取该数字并将其“拆分”为 6 个骰子,其中的值将在 1-6 之间。

我有点不确定将使用的技术,想到的一件事是位掩码,但我不确定这是否是正确的上下文。

从二进制的角度来看,骰子值在 0-5 之间是合理的。这将给我们二进制数 000-101。现在随机函数返回的最大值将为 101101101101101101(六个骰子,每个为“6”),十进制表示随机 int 返回的上限为 187245。下限为 0。现在假设random 函数返回数字 66508,将其转换为二进制形式,我们得到 010|000|001|111|001|100,这还不够好!在这种情况下,其中一个骰子是 111 = 7,而当间隔应该是 0-5 (1-6) 时,我们无法得到它:(

我需要找出一种方法,限制范围内的小数可以包含六个值为 1-6 (0-5) 的骰子,但我需要一些帮助。

4

1 回答 1

2

您可以使用值x % 6, (x / 6) % 6, (x / 6^2) % 6, ... ,(x / 6^5) % 6其中 x 是随机数生成器中的数字。但是,如果您这样做,将会有偏差。如果您想避免这种偏差,您应该拒绝 x 并在它大于 6**6-1 时重新选择。

于 2009-12-13T17:24:55.030 回答