您的位置:首页 > 其它

一个函数产生0/1的概率为 二分之一, 如何生成一个新函数使得产生0的概率为十分之三 产生1的概率为十分之七

2013-04-16 23:06 537 查看
转自出处

(1) 有一个函数fun能返回0和1两个值,返回0和1的概率都是1/2,问怎么利用这个函数得到另一个函数fun2,使fun2也只能返回0和1,且返回0的概率为0.3,返回1的概率为0.7。

分析:

Nathan 16:42:59

随机生成长度为4的01串

0000~1111每个串出现的概率都为1/16

Nathan 16:44:28

如果生成的串为0000 0001 0010之一,则返回0

Nathan 16:45:45

如果生成的串为0011 0100 0101 0110 0111 1000 1001则返回1(共七个串)

否则,递归,重新来过

代码:

[cpp] view
plaincopy

int func2()

{

int n = 0;

int v0 = fun();

int v1 = fun();

int v2 = fun();

int v3 = fun();

n |= v0;

n |= (v1<<1);

n |= (v2<<2);

n |= (v3<<3);

if(n <= 2) return 0;//0, 1, 2

else if(n <= 9) return 1;//3, 4, 5, 6, 7, 8, 9

return func2();

}

说明:

生成的四个数放到n的低四位上

0000 对应十进制数 0

0001 对应十进制数 1

...

1111对应十进制数15

16个串对应0 ~ 15共16个整数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐