Redian新闻
>
求教Careercup 150 上的一道题目
avatar
求教Careercup 150 上的一道题目# JobHunting - 待字闺中
m*u
1
以前有一个,坏掉了,准备再搞一台
不用太多功能,能做豆浆和米浆就行
avatar
D*n
2
19.10 Write a method to generate a random number between 1 and 7, given
a method that generates a random number between 1 and 5 (i.e., implement
rand7() using rand5()).
看了书的答案还是不太明白啊。。。为什么rand2()用decision tree表示,到leaf会有
3的result??
answer: public static int rand7()
{
while(true)
{
int num = 5 * ( rand5() - 1) + ( rand5() - 1);
if ( num < 21 ) return ( num % 7 + 1);
}
}
哪位高手能解释一下这段代码的正确性??
avatar
s*n
4
只用rand(5) -1, 产生0 5 10 15 20 25.需要再用一次生成01234
然后
0 + 01234
5 + 01234
10 +....
.....
就是0..25 的random distribution了。
剩下的就很好理解了。

given

【在 D***n 的大作中提到】
: 19.10 Write a method to generate a random number between 1 and 7, given
: a method that generates a random number between 1 and 5 (i.e., implement
: rand7() using rand5()).
: 看了书的答案还是不太明白啊。。。为什么rand2()用decision tree表示,到leaf会有
: 3的result??
: answer: public static int rand7()
: {
: while(true)
: {
: int num = 5 * ( rand5() - 1) + ( rand5() - 1);

avatar
s*x
6
1 <= rand5() <= 5
0 <= rand5() -1 <= 4
0 <= 5 *(rand5() -1) <= 20
1 <= 5 *(rand5() -1) + ( rand5() - 1) <= 25
avatar
z*g
7
买了两台,便宜了$20
avatar
d*e
8
你这个没解释清楚为什么要这样做,上面slimcan说得比较明白。

【在 s**x 的大作中提到】
: 1 <= rand5() <= 5
: 0 <= rand5() -1 <= 4
: 0 <= 5 *(rand5() -1) <= 20
: 1 <= 5 *(rand5() -1) + ( rand5() - 1) <= 25

avatar
S*i
9
这款不错,我家就用这款,很实用的,感恩节买成83刀,店家还送了赠品:
http://www.360videoshopping.com/cn/joyoung-cts-1078s

【在 m*******u 的大作中提到】
: 以前有一个,坏掉了,准备再搞一台
: 不用太多功能,能做豆浆和米浆就行

avatar
s*y
10
I do not think it is right one.
I think this one is right:
http://stackoverflow.com/questions/137783/expand-a-random-range
1-7
int i;
do
{
i = 5 * (rand5() - 1) + rand5(); // i is now uniformly random between 1 a
nd 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

【在 d**e 的大作中提到】
: 你这个没解释清楚为什么要这样做,上面slimcan说得比较明白。
avatar
m*r
11
西版的团购
豆浆机coupon:scgroup7 off$13
链接: http://www.huarenstore.com/joyoung-cts-1078s.html
订购。
团购说明:
1、coupon有效期为3天;
2、组员可以各自使用coupon下单,免税免邮资;
3、团购价为最优惠价,不能叠加使用其他coupon和获得评论返现。

【在 m*******u 的大作中提到】
: 才便宜5块钱啊
avatar
m*u
13
我买了那个红色的欧克,因为觉得它比较漂亮
avatar
s*y
15
one generate 0 - 6
one generate 1 - 7

【在 d**e 的大作中提到】
: 区别不是很大吧
: 只是一个算1-25,一个算0-24

avatar
D*n
16
先谢谢各位大神啦。。。

答案待俺慢慢消化。。。
avatar
d*e
17
但我觉得 num%7 + 1 得不到 0...

【在 s*****y 的大作中提到】
: one generate 0 - 6
: one generate 1 - 7

avatar
s*y
18
Why need to generate 0?

【在 d**e 的大作中提到】
: 但我觉得 num%7 + 1 得不到 0...
avatar
d*e
19
我没说需要0啊,只是你说一个是0-6,但我觉得得不到0
因为都是得到1-7,所以生成0-24(if num < 21) 和1-25(if num < 22)没什么区别吧

【在 s*****y 的大作中提到】
: Why need to generate 0?
avatar
s*y
20
不好意思,眼花了,看错了原来树上的代码,以为那里没有加1。

【在 d**e 的大作中提到】
: 我没说需要0啊,只是你说一个是0-6,但我觉得得不到0
: 因为都是得到1-7,所以生成0-24(if num < 21) 和1-25(if num < 22)没什么区别吧

avatar
c*p
21
好像还有更给力的版本。。
目前这个版本,存在一直出大于22的数的可能。。。。

given

【在 D***n 的大作中提到】
: 19.10 Write a method to generate a random number between 1 and 7, given
: a method that generates a random number between 1 and 5 (i.e., implement
: rand7() using rand5()).
: 看了书的答案还是不太明白啊。。。为什么rand2()用decision tree表示,到leaf会有
: 3的result??
: answer: public static int rand7()
: {
: while(true)
: {
: int num = 5 * ( rand5() - 1) + ( rand5() - 1);

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。