谷歌面试题:给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
2012-03-23 22:37 Rollen Holt 阅读(3439) 评论(0) 编辑 收藏 举报给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数。
我的想法:
编写一个生成0和1的随机函数:
step1. 调用给定的随机函数original_rand()生成一个数
如果==3 goto step1
如果<3 return 0
如果>3 return 1
编写一个生成1到7的随机函数
调用生成0和1的随机函数3次,构成000或001或010.......
如果???不等于0返回,否则重新生成。
int rand_01() { int r = original_rand(); if(r == 3) return rand_01(); if(r < 3) return 0; if(r > 3) return 1; } int rand_17() { int i = 0; i += rand_01(); i += rand_01() << 1; i += rand_01() << 2; if(i == 0) return rand_17(); return i; }
有网友提出这种思路:
产生K个数(k>1) 假定产生的数分别为n1,n2,n3,n4...
那么定义产生的数为n1-1+(n2-2)*5+(n3-1)*5^2+(n4-1)*5^3........
于是产生的数位于区间(0,5^k-1)
然后把5^k分成k等分,产生的数位于哪个等分就是那个产生的随机数(0~6),然后+1即可
如果位于k等分的余数范围,则重新执行一次上述过程
不用担心余数问题,当k取3时落到余数范围的概率就已经降低为6/125
也是可以参考的。
==============================================================================
本博客已经废弃,不在维护。新博客地址:http://wenchao.ren
我喜欢程序员,他们单纯、固执、容易体会到成就感;面对压力,能够挑灯夜战不眠不休;面对困难,能够迎难而上挑战自我。他
们也会感到困惑与傍徨,但每个程序员的心中都有一个比尔盖茨或是乔布斯的梦想“用智慧开创属于自己的事业”。我想说的是,其
实我是一个程序员
==============================================================================