一道百度的面试题目。
题目:给一个函数,返回 0 和 1,概率为 p 和 1-p,请你实现一个函数,使得返回 01 概率一样(来源)。
解:对此函数 n 次抽样,则其出现1次的次数符合正态分布,其中中心期望值为 n*p,其他值在中心值两侧的分布相等。
设给定函数名称为GetNumber(),根据这个原理,可定义如下函数。
// 随机返回0或1,其中0或1返回的概率都为50%。
// n可以取一个不太大的自然数, 如100。注:n 太小影响精度,太大影响计算效率。
public int GetNumberEven(int n)
{
double possibility = p;
double exp = p * count;
int sum = 0;
for(int i = 0; i < n; i++)
sum += GetNumber();
return sum > exp ? 0 : 1;
}