题目
假定函数rand_k会随机返回一个[1,k]之间的整数(k>=2),并且每个整数值出现的几率相等。已知目前有rand_7的实现,请问通过调用rand_7和四则运算函数,并适当增加逻辑判断和循环等控制逻辑,下列函数可以实现的有______。
A.rand_3
B.rand_21
C.rand_23
D.rand_47
解答
正确答案是 ABCD
解析:
rand_7*7 = 7,14,21,28,35,42,49=A
rank_7 = 1,2,3,4,5,6,7=B
A,B任取一个元素求和,这个和出现概率都相同1/7*1/7.
因此rand_7*7 + rank_7 = [8,56]的每个元素是等概率的
rand_7*7 + rank_7 -7= [1,49]的每个元素是等概率的
所以:
int rand_k(){ n=50; while(n>k)n= rand_7*7 + rank_7 -7;return n;}/* 删去所有大于k的数字 */
但是rand_7*8这种方式就得不到均匀分布了 , 因此rank_1,...rank_49均可实现,也只能实现这49中情况。
可以把所有资料打包,发给我嘛?
推荐一个我使用过的框架,https://github.com/wuyouzhuguli/FEBS-Vue,UI还不错