zoukankan      html  css  js  c++  java
  • 用随机数生成随机数

    题目要求:

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

    解法思想:

    0,1随机生成,可以理解成2进制
    a = fun() * 2^4 + fun() * 2^3 + fun() * 2^2 + fun() * 2^1 + fun() 等概率生成0-31的所有数
    去掉30和31之后,在0-29之间进行一个%3 输出

    伪代码:

    int generator()
    {
    	// 生成一个 0 - 31 之间的数字	
    	return a = fun() * 2^4 + fun() * 2^3 + fun() * 2^2 + fun() * 2^1 + fun();
    }
    
    int fun2()
    {
    	int a = generator();
    
            // 缩减到 0 - 29 的范围
    	while(a == 30 || a == 31){
    		a = generator();	
    	}
            // 3*1 - 3*9 共9个能被3 整除,返回0
    	// 剩余30 -9 = 21 个不能被整除,返回1
    	// 比例为9:21 = 3:7
    	if(a != 0){
    		int b = a % 3; // 3*1 - 3*9
    		if(b == 0){
    			return 0;	
    		}
    	}
    	return 1;
    }
    

      

  • 相关阅读:
    SQL优化
    Mybatis
    Spring MVC(总结二)
    ES多机集群配置
    ES索引,分片,一致性
    ElasticSearch关于索引库的命令操作
    试题01(一)
    Linux安装配置elastic search
    Windows安装配置elastic search
    SpringBoot(二)
  • 原文地址:https://www.cnblogs.com/handt/p/2706028.html
Copyright © 2011-2022 走看看