一个特例:已知一个随机数生成函数f3(),即以相同的概率随机返回0, 1, 2(返回每个数的概率均为1/3),现要求通过调用f3()实现一个函数f5()。
解答方法:
(1)最基本的思路:
计算机中所有的数都是由二进制表示,所以如果能得到一个函数f2(),以50%的概率得到0或者1,那就可以通过这个函数来生成任何一个随机数产生器了。
f2(){int a; while((a = f3()) > 1); return a;}
然后f5()就能通过f2()实现。
(2)一次简单扩展:
既然任何一个数能用二进制表示,那也能用三进制表示,f3()就是一个生产三进制各位数字的函数,所以可以通过f3()直接得到f5()。伪代码:
int f5() {
int a;
do {
a = 3 * f3() + f3();
}while(a > 4);