b******s 发帖数: 2919 | 1 用一个均匀的硬币,模拟一个均匀的骰子
或者说,给定一个随机数发生器 int f(),均匀地产生0和1的值。
求一个随机数发生器 int g(),均匀地产生0到5的值。 |
l*******1 发帖数: 1 | |
l*******1 发帖数: 1 | 3 正态分布了,得修正一下
【在 l*******1 的大作中提到】 : 不太明白trick在哪,扔5次数一下?
|
l*******1 发帖数: 1 | |
c*********n 发帖数: 1282 | 5 这个简单,用f()产生一个3位的2进制数,如果这个数在0-5之间,就返回这个数
,如果大于5,重新产生一边。pseudo code:
random5()
{
while (true) {
int n = 4*f()+2*f()+f();
if (n<=5) return n;
}
} |
l*******1 发帖数: 1 | 6
这个不必然停机啊
【在 c*********n 的大作中提到】 : 这个简单,用f()产生一个3位的2进制数,如果这个数在0-5之间,就返回这个数 : ,如果大于5,重新产生一边。pseudo code: : random5() : { : while (true) { : int n = 4*f()+2*f()+f(); : if (n<=5) return n; : } : }
|
b******s 发帖数: 2919 | 7 这个给80分.
这个approach可以稍微改进一下得90分 ( hint 6=2*3)
【在 c*********n 的大作中提到】 : 这个简单,用f()产生一个3位的2进制数,如果这个数在0-5之间,就返回这个数 : ,如果大于5,重新产生一边。pseudo code: : random5() : { : while (true) { : int n = 4*f()+2*f()+f(); : if (n<=5) return n; : } : }
|
b******s 发帖数: 2919 | 8 没看懂
【在 l*******1 的大作中提到】 : 扔5次,每两种排列一组分5组
|
b******r 发帖数: 1 | |