由随机数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;
}
由随机数rand5实现随机数rand7的更多相关文章
- 《java入门第一季》之HashSet小案例:获取10个1至20的随机数,要求随机数不能重复
这是基于HashSet集合的唯一性. /* * 编写一个程序,获取10个1至20的随机数,要求随机数不能重复. * * 分析: * A:创建随机数对象 * B:创建一个HashSet集合 ...
- js进阶解决浏览器缓存不能自动更新的问题(在ajax的url上带上一个参数,可以是日期,或者是随机数)(随机数Math.random)(取得日期的毫秒数:new Date().getTime();)
js进阶解决浏览器缓存不能自动更新的问题(在ajax的url上带上一个参数,可以是日期,或者是随机数)(随机数Math.random)(取得日期的毫秒数:new Date().getTime();) ...
- js生成[n,m]的随机数,js如何生成随机数,javascript随机数Math.random()
一.预备知识 Math.ceil(); //向上取整. Math.floor(); //向下取整. Math.round(); //四舍五入. Math.random(); //0.0 ~ 1 ...
- C/C++基础----随机数分布和随机数引擎
随机数分布 除了伯努利分布,其他都是模板,接收单个类型参数,指出分布生成的结果类型. 表示分布生成浮点数,float.double或long double 表示要求一个整型类型,不包括bool或任何c ...
- java随机生成6位随机数 5位随机数 4位随机数
随机数,应用会相当广,验证数,订单号,流水号拼接. 下面是java随机数生成语句: 生成6位随机数(不会是5位或者7位,仅只有6位): System.+)*)); 同理,生成5位随机数: System ...
- 给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数。 (即,使用函数rand5()来实现函数rand7())
给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数. (即,使用函数rand5()来实现函数rand7()). 解答 rand5可以随机生成1,2,3,4,5:rand7可以随机生成1 ...
- 67. 总结篇:面试中随机数"等概率"vs"不等概率"生成问题[random generator with equal or unequal probability]
[本文链接] http://www.cnblogs.com/hellogiser/p/random-generator-with-equal-or-unequal-probability.html 1 ...
- 给定1-a的随机数生成器,产生1-b的随机数生成器
转自http://www.code123.cc/959.html 先给出一个例子,后面会有扩展 题目 给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数. (即:使用函数rand5() ...
- C++产生随机数
随机数 计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子.(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是6 ...
随机推荐
- GlusterFS缺陷
glusterfs缺陷 转自:http://www.liuwq.com/2017/04/20/glusterfs%E8%AF%A6%E8%A7%A3/ glusterfs 原理.优势.使用范围等 Gl ...
- 【Web技术】334- yarn、npm、cnpm 三者如何优雅的在一起使用 ?
前端得包管理你有过几个? 一位用不好包管理器的前端,是一个入门级前端,一个用不好webpack的前端,是一个初级前端 三个包管理器是可以一起用的,只要你够胆大心细,就没任何问题! 在javeScrip ...
- 设置QQ环境变量
1.右击此电脑 → 属性 win10用户可以直接按 'win'键 ,输入 "系统环境变量" 2.点击 高级系统环境设置 → 环境变量 3.在系统变量里找到 path → 编辑 4. ...
- CSS之position属性
层级的话可以用z-inde进行设置
- android studio 点击后,不打开上次的项目,
取消勾选Reopen last project on startup选项,
- 《Java基础知识》Java接口和抽象类的区别
抽象类 抽象类必须用 abstract 修饰,子类必须实现抽象类中的抽象方法,如果有未实现的,那么子类也必须用 abstract 修饰.抽象类默认的权限修饰符为 public,可以定义为 public ...
- AWVS 10.5使用指南
前言 AWVS是一款可与IBM AppScan比肩的.功能十分强大的Web漏洞扫描器.由Acunetix开发,官方站点提供了关于各种类型漏洞的解释和如何防范,具体参考:Acunetix Web Vul ...
- 知识图谱推理与实践(3) -- jena自定义builtin
在第2篇里,介绍了jena的The general purpose rule engine(通用规则引擎)及其使用,本篇继续探究,如何自定义builtin. builtin介绍 先回顾builtin为 ...
- Elasticsearch(GEO)数据写入和空间检索
Elasticsearch简介 什么是 Elasticsearch? Elasticsearch 是一个开源的分布式 RESTful搜索和分析引擎,能够解决越来越多不同的应用场景. 本文内容 本文主要 ...
- Android 菜单 使用XML
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to th ...