给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数。
问题:
给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数。
解答:
假设我们要等概率生成一个3位的10进制数(000 - 999),我们可以在 随机生成整数0到9的函数 基础上,随机生成3个数字组成三位数就得到了结果。
这里类似,我们首先必须认识到:任何一个数都可以用5进制的数来表示,如12 = 5进制(22) = 2*5 + 2。因此假设我们要随机生成[0,444]范围的数,我们只要随机生成3个5进制的数字组合就可以。
这里的主要问题是:7不是5的幂次方。
但是我们可以将某一个5的幂次方均分成 7 段(分别为0 - 6,等概率的落到每一段),利用5进制随机成一个数,看这个数在哪一个段,就代表我们要生成哪一个数字,这样就保证了等概率的生成0 - 6.
有一个小的问题就是:5的幂次方不能整除7,会遗漏最高的几个数。但是我们这里只要数字足够大,则遗漏的概率相当的小。
转自 http://hi.baidu.com/nicker2010/item/38be6c4a9b7287a7de2a9f1d