zoukankan      html  css  js  c++  java
  • 由随机数rand5实现随机数rand7

    rand5表示生成随机数1,2,3,4,5

    rand7表示生成随机数1,2,3,4,5,6,7

    要通过rand5构造rand7现在可能没有什么思路,我们先试着用rand7生成rand5

    rand7生成rand5很简单,把6和7排除掉就是rand5了,也就是当随机到大于5的时候,就再随机一次,直到小于等于5

    代码写起来很容易

    
    public static int rand5(){
        Random ra =new Random();
        int result = ra.nextInt(7)+1;
        while (result > 5){
    
            result = ra.nextInt(7)+1;
        }
    
        return result;
    
    }
    

    这时我们可以用同样的思路,先利用rand5把范围放大,然后再排除掉超出的范围

    这里我们用这样的一个公式:newRand = n * (Randn – 1) + Randn,这个公式可以保证新的随机数中每个的概率是相同的(可以自己试试其他构造方式,你会发现有的结果中每个数的概率是不同的)

    比如rand5,newRand = 5×(Rand5-1)+ Rand5,那么newRand的范围就是1-25

    如果你扩大了一次范围之后还是比目标范围小,那么就再将newRand扩大一下newRand2 = n * (newRand – 1) + Randn

    这时rand5以及扩大到rand25了,接下来把范围缩小,如果直接排除的话,要除去8-25,这个范围太大了

    所以我们找到比25小的最近的7的倍数21

    我们把随机数缩小的1-21后,再除以7取余数+1,这样得到的结果就是1-7了

    
    public static int rand7(){
        int result = 25;
        while (result > 21){
    
            result = 5*(rand5()-1)+rand5();
        }
    
        return result%7+1;
    
    }
    
  • 相关阅读:
    ASP.NET MVC 学习笔记 1
    安装xp遇到的问题与如何连接共享的打印机
    win8.1 安装
    AspxGridView控件的使用
    JS获取fileupload文件全路径
    正则表达式的学习
    回归起点
    Vmware ESX 5.0 安装与部署
    UITextField检测输入内容不能有空格的处理
    关于cell自动布局约束实现高度自适应问题
  • 原文地址:https://www.cnblogs.com/sfencs-hcy/p/11279714.html
Copyright © 2011-2022 走看看