微软校招面试-已知f(x),求g(x)

描述:已知f(x)是一个可以生成1,2,3,4,5的随机数生成器。用f(x)生成一个新的随机数生成器g(x),g(x)的生成数的范围是1~13,且13个数出现的概率相同。

思路:

设q(x)是一个可以生成1~25的随机数生成器,先处理:f(x)->q(x)

利用f(x)生成两个随机数,这两个随机数可以有25种序列:<1,1>,<1,2>,<1,3>,<1,4>,<1,5>...<5,2>,<5,3>,<5,4>,<5,5>

将这25种序列映射为1~25的数字,则这25个数字出现的概率是一样的,这样我们从f(x)->q(x);

 

由q(x)->g(x)。如果q(x)生成的数字是1~13,则返回生成的数字,如果超过13,则放弃这次生成的结果,继续利用q(x)生成一个随机数。

这样经过若干次使用q(x)后,我们总能获得一个1~13的随机数,且这个随机数出现的概率是相等的。

posted on 2015-08-20 23:27  linxiong1991  阅读(247)  评论(0编辑  收藏  举报

导航