【问题标题】:Trying to generate several digit intervals in one number (LUA)尝试在一个数字中生成多个数字间隔(LUA)
【发布时间】:2010-12-26 04:59:01
【问题描述】:

基本上我必须使用一个随机函数,它可以返回一个介于 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) 的骰子,但我需要一些帮助。

【问题讨论】:

  • 不要在二进制中使用位掩码...在 Mark Byers 的回答中使用 base 6。
  • 这个问题和 Lua 有什么关系?

标签: random numbers mask intervals dice


【解决方案1】:

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

【讨论】:

  • 可爱!我确信 mod 会在解决方案中使用。 :)
  • 对于如何使用模数生成 0 和 n 之间的均匀随机数的一个很好的算法,您可以看到 java.util.Random.nextInt(int): java.sun.com/javase/6/docs/api/java/util/…
猜你喜欢
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
相关资源
最近更新 更多