【发布时间】:2010-10-13 05:47:15
【问题描述】:
给定两个随机整数生成器,一个生成 1 到 7 之间,另一个生成 1 到 5 之间,你如何制作一个生成 1 到 13 之间的随机整数生成器?我已经尝试以各种方式解决这个问题,但我无法想出一个以相等或接近相等的概率生成从 1 到 13 的数字的解决方案。
【问题讨论】:
标签: math random probability
给定两个随机整数生成器,一个生成 1 到 7 之间,另一个生成 1 到 5 之间,你如何制作一个生成 1 到 13 之间的随机整数生成器?我已经尝试以各种方式解决这个问题,但我无法想出一个以相等或接近相等的概率生成从 1 到 13 的数字的解决方案。
【问题讨论】:
标签: math random probability
使用Expand a random range from 1–5 to 1–7 的前两个答案,我想出了以下答案。可能有更有效的方法来做到这一点(也许使用 1-5 生成器?)但这似乎有效。
针对紧凑性进行了优化
var j;
do {
j = 7 * (rand7() - 1) + rand7(); // uniformly random between 1 and 49
} while (j > 39);
// j is now uniformly random between 1 and 39 (an even multiple of 13)
j = j % 13 + 1;
为易于理解而优化
var v = [
[1, 2, 3, 4, 5, 6, 7],
[8, 9, 10, 11, 12, 13, 1],
[2, 3, 4, 5, 6, 7, 8],
[9, 10, 11, 12, 13, 1, 2],
[3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0]
];
var j = 0;
while (j == 0) {
j = v[rand7() - 1][rand7() - 1];
}
【讨论】: