Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
请尝试编写rand30()返回 1 到 30 的函数。
rand30()
你有rand100()功能。
rand100()
假设函数返回整数:
int r = rand100(); while (r > 90) { r = rand100(); } return 1 + (r - 1) % 30;
其中%运算符表示模数。
%
当我们均匀分布 100 个输入数字时,要获得 30 个输出数字的均匀分布,我们能做的最好的事情是将 3 个输入数字映射到一个输出数字。必须丢弃剩余的 10 个输入。
我们平均多久调用一次 rand100?1 次 90% 2 次 9% 3 次 0.9% ...
平均值为 1.111111