rand5 rand7

  • 今天公司有一个面试题是这样的:假如有一个函数rand5能等概率生成1 - 5 之间的整数,如何利用rand5来实现rand7?rand7函数的要求是能够等概率生成1 - 7之间的整数。说实话我自己也不是很清楚。
  • 这个问题很经典的。carreercup那本书上有个常见的解法,我记得算法大概是这样的,用PHP写写吧:


  • 这么写是什么意思呢?
  • 两次使用rand5(),可以生成1-25的所有数。5 * (rand5() - 1) 可以生成 0 - 20,而后面的则可以生成0 - 4。用数学表达的话就是 [0, 24]。
  • [0, 24] 范围内生成的随机数$i如果大于21,就用 while (true) 重新生成。当$i < 21的时候,就可以用模运算了。
  • 明白了。当 $i < 21的时候,模 7 的结果是 0-6,加1就可以修正为 1-7,这样就可以通过rand5来实现rand7了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值