由随机数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;
}
html实现用户注册登录代码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;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论