我最近在接受采访时被问到这个问题:
您将获得一个公平的Randon5()函数,该函数以相同的概率返回1-5之间的数字。现在你需要使用Random5()编写一个公平的Random7()函数,它将返回1-7之间的数字,没有别的东西可供使用。
先谢谢。
答案 0 :(得分:2)
一般来说,在有限的有限时间内不可能这样做,因为7不是5的幂。你可以这样做,程序永远运行的概率是0,即它会终止,但它只是一个什么时候的问题。
对于一种方法,运行1-5发生器两次以获得1到25之间的随机数。如果数字大于21,则重复。否则,如果你得到1到21之间的数字,当你除以7时加上余数并加1。由于7除以21,这将给你一个1到7之间的统一随机数。
每次尝试获得1到21之间的数字时,您只有4/25的机会失败。因此,在成功之前必须迭代过程的预期次数小于2.