写函数rand30()使用统一分布的rand100()返回1到100

时间:2013-01-08 14:34:51

标签: algorithm

请尝试编写应返回1到30的函数rand30()

您有rand100()功能。

1 个答案:

答案 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