由随机数rand5实现随机数rand7
2019-08-16 11:37:26来源:博客园 阅读 ()
由随机数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;
}
?
原文链接:https://www.cnblogs.com/sfencs-hcy/p/11279714.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- DES/3DES/AES 三种对称加密算法实现 2020-06-11
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后 2020-06-10
- Spring Boot 实现定时任务的 4 种方式 2020-06-10
- JSP+SSH+Mysql+DBCP实现的租车系统 2020-06-09
- Java实现的三种字符串反转 2020-06-09
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash