请尝试编写应返回1到30的函数rand30()
。
您有rand100()
功能。
答案 0 :(得分:6)
假设函数返回整数:
int r = rand100();
while (r > 90) {
r = rand100();
}
return 1 + (r - 1) % 30;
%
运算符表示模数。
当我们均匀分布100个输入数时,为了得到30个输出数的均匀分布,我们能做的最好是将3个输入数映射到一个输出数。必须丢弃剩余的10个输入。
我们多久平均一次调用rand100? 1次90% 2次9% 0.9%3次 ...
平均值为1.111111