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

本文介绍如何通过组合使用一个等概率返回0和1的基本随机函数,构建新的随机函数,使其能够按照特定概率(例如0.3和0.7)返回0和1。通过生成固定长度的01字符串,并根据不同子集映射到0或1,可以实现所需的概率分布。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



(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 plain copy
  1. int func2()  
  2. {  
  3.   int n = 0;  
  4.   int v0 = fun();  
  5.   int v1 = fun();  
  6.   int v2 = fun();  
  7.   int v3 = fun();  
  8.   n |= v0;  
  9.   n |= (v1<<1);  
  10.   n |= (v2<<2);  
  11.   n |= (v3<<3);  
  12.   if(n <= 2) return 0;//0, 1, 2  
  13.   else if(n <= 9) return 1;//3, 4, 5, 6, 7, 8, 9  
  14.   return func2();  
  15. }  
说明:

 生成的四个数放到n的低四位上 
 0000 对应十进制数 0
0001 对应十进制数 1
...
1111对应十进制数15
16个串对应0 ~ 15共16个整数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值