硬币"/>
投硬币
2010年brain teaser(脑筋急转弯)题目还在各大IT公司的面试中流行,曾经在亚马逊有位美国人问了我一道题目:给一个rand5()的函数,可以均匀产生0到5的随机数。如何得到0到7的均匀分布的随机数。也就是要用rand5()实现一个rand7()。
这个题目如果改换一个说法,相信就容易多了:给你一个硬币,如何产生0到7的随机数?
方法自然是投硬币,我们规定正面为0,反面为1,连续投3次硬币,根据正反面共有8种组合:正正正,正正反,正反正,正反反,反正正,反正反,反反正,反反反,分别对应二进制数000到111,也就是0到7。
如何用rand5()实现扔硬币的效果呢?一个简单的方法就是通过奇偶性。为了增加趣味性,我们再提高一下难度,如果这个硬币有问题,正反两面出现的概率不等,如何解决呢?
方法是,扔两次,定义顺序”正反“为1,顺序”反正“为0,如果两次都是正,或者两次都是反,就重来。
在硬币正反出现机会不等的情况下,你能想出扔硬币次数更少的,均匀生成0到7以内随机数字的方法么?
更多推荐
投硬币
发布评论