l******c 发帖数: 2555 | |
l******c 发帖数: 2555 | 2 random(0,1) = 0 or 1
random(a, b) = a, a+1, ... b
【在 l******c 的大作中提到】![](/moin_static193/solenoid/img/up.png) : .
|
l******c 发帖数: 2555 | 3 incorrect
【在 l******c 的大作中提到】![](/moin_static193/solenoid/img/up.png) : random(0,1) = 0 or 1 : random(a, b) = a, a+1, ... b
|
l******c 发帖数: 2555 | |
r****o 发帖数: 1950 | 5 ranNum=a;
for (int i=0; i
ranNum+=random(0,1);
【在 l******c 的大作中提到】![](/moin_static193/solenoid/img/up.png) : not right
|
r****o 发帖数: 1950 | 6 为啥不对?
【在 r****o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : ranNum=a; : for (int i=0; i: ranNum+=random(0,1);
|
l******c 发帖数: 2555 | 7 this algorithm is not right, not the detail issue.
I hope some fresh graduate can post an answer, because they must have learn
it in the classroom.
【在 r****o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : ranNum=a; : for (int i=0; i: ranNum+=random(0,1);
|
r****o 发帖数: 1950 | 8 明白了,
那这样行吗?
用b-a的二进制形式,比如说是12=1100,共4位。
那么运行random(0,1)4次,每次相当于二进制的一位,如果凑成的二进制数小于等于
1100,则返回randNum+b-a,否则重来。
int diffSize=0;
int diff=b-a;
while(!diff)
{
diffSize++;
diff>>=1;
}
int randNum=MAX_INT;
while(randNum>b-a)
{
randNum=0;
for (int i=0; i
{
randNum+=random(0,1)<
}
}
return randNum+b-a;
learn
learn
【在 l******c 的大作中提到】![](/moin_static193/solenoid/img/up.png) : this algorithm is not right, not the detail issue. : I hope some fresh graduate can post an answer, because they must have learn : it in the classroom.
|
p**********s 发帖数: 115 | |
K******g 发帖数: 1870 | 10 为什么这么做?
【在 r****o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 明白了, : 那这样行吗? : 用b-a的二进制形式,比如说是12=1100,共4位。 : 那么运行random(0,1)4次,每次相当于二进制的一位,如果凑成的二进制数小于等于 : 1100,则返回randNum+b-a,否则重来。 : int diffSize=0; : int diff=b-a; : while(!diff) : { : diffSize++;
|
|
|
c***p 发帖数: 221 | 11 这题考的是,给定n, 如何用random(0,1)生成 random(0, n-1)
如果把random(0,1)的output看做是一个bit,这个题目就转化成integer的二进制表示
问题了。
【在 K******g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 为什么这么做?
|
r****o 发帖数: 1950 | 12 应该说接近a和b的数概率小,中间的数概率大。
【在 K******g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 为什么这么做?
|
K******g 发帖数: 1870 | 13 呵呵,知道了,多谢提醒
【在 r****o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 应该说接近a和b的数概率小,中间的数概率大。
|
K******g 发帖数: 1870 | 14 请教一下,为什么
已知rand[1,5], 求rand[1,7].
可以像下面一样做呢?
int rand7()
{
while (1)
{
int num = 5*(rand5() -1) + rand5()- 1;
if (num < 21) return num % 7;
}
}
有什么理由吗?
【在 p**********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 楼上正解!楼主可以看看编程珠玑第12章.或者 : http://wansishuang.appspot.com/?p=59003
|
s*******s 发帖数: 27 | 15 5*(rand5()-1) + (rand5()-1) gives rand24, which can be used to generate
rand7()
【在 K******g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 请教一下,为什么 : 已知rand[1,5], 求rand[1,7]. : 可以像下面一样做呢? : int rand7() : { : while (1) : { : int num = 5*(rand5() -1) + rand5()- 1; : if (num < 21) return num % 7; : }
|
K******g 发帖数: 1870 | 16 那为什么要先generate rand24?为什么不34,39, 或者29?
还有,为什么要if(num<21) ...? 产生24后,为什么不24%7+1 ? 多谢!
【在 s*******s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 5*(rand5()-1) + (rand5()-1) gives rand24, which can be used to generate : rand7()
|