由随机数rand5实现随机数rand7

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

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

要经过rand5构造rand7如今可能没有什么思路,咱们先试着用rand7生成rand5app

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

代码写起来很容易post

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把范围放大,而后再排除掉超出的范围ui

这里咱们用这样的一个公式:newRand = n * (Randn – 1) + Randn,这个公式能够保证新的随机数中每一个的几率是相同的(能够本身试试其余构造方式,你会发现有的结果中每一个数的几率是不一样的)url

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

若是你扩大了一次范围以后仍是比目标范围小,那么就再将newRand扩大一下newRand2 = n * (newRand – 1) + Randncode

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

因此咱们找到比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;

}
相关文章
相关标签/搜索