注意:我无法使用任何内置函数来解决此问题。
这就是问题:
给定一个返回1到5之间随机整数的函数,创建一个创建1到7之间随机整数的函数。
答案 0 :(得分:1)
显然是以下doesn't work。请参阅链接的答案和其他答案。
嗯,这是我正在考虑的方法。这可能是错的。我假设结果应该在更大的范围内随机分布。
使用给定的随机函数(生成数字[1,5])生成7个随机数并计算它们的总和。
这将产生介于7(1 * 7)和35(5 * 7)之间的值。
因为这个值可以被目标范围整除并且随机分布,所以似乎将中间范围[7,35]折回到[1,7]是有效的,而不会失去一致性。
或许这不是它 - 但似乎利用数字之间的共同倍数是关键。
答案 1 :(得分:1)
在Adam Rosenfield's solution前一段时间你已经回答过,你可能会尝试使用类似下面这个算法的算法:
int i;
do
{
i = 5 * (rand5() - 1) + rand5(); // i is now uniformly random between 1 and 25
} while(i > 21);
// i is now uniformly random between 1 and 21
return i % 7 + 1; // result is now uniformly random between 1 and 7
编辑:翻译为python:
def rand7():
i = 0;
while True:
i = 5 * (rand5() -1) + rand5()
if i > 21:
break
return i % 7 + 1
答案 2 :(得分:-1)
import random
def winningFunc():
return originalFuncReturning1to5() + random.randint(0,2)