等概率生成器

假设生成0的概率是p,生成1的概率是1-p,则生成01和10的概率相等。

随机生成0、1


int rand_Z_One()
{
       int n = rand();
       if(n>1000)
            return 0;
       else
            return 1;
}

等概率生成0、1即概率为0.5;

int  newRand()

{

       int n1 = rand_Z_One();

       int n2 = rand_Z_One();

       if(n1==0&&n2==1)

          return 1;

      if(n1==1&&n2==0)

          return 0;

      return newRand();

}

等概率生成1.。。。n

解法:求出n的二进制表示位数 k;

int NNewRand()

{

       int result = 0;

       for(int i = 0;i<k;i++)

       {

              if(newRand()==1)

                   result=result|1<<i;

       }

       if(result+1>n)

         return NNewRand();

      return result+1;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值