转自:http://blog.csdn.net/furturerock/article/details/6850634

View Code

 1 int rand7()
 2 {
 3   return rand()%7+1;
 4 }
 5
 6 int rand10()
 7 {
 8     int x=0;
 9     do
10     {
11         x=(rand7()-1)*7+rand7();
12     }
13     while(x>40);
14     return x%10+1;
15 } 

分析:要保证rand10()在整数1-10的均匀分布,可以构造一个1-10*n的均匀分布的随机整数区间(n为任何正整数)。假设x是这个1-10*n区间上的一个随机整数,那么x%10+1就是均匀分布在1-10区间上的整数。由于(rand7()-1)*7+rand7()可以构造出均匀分布在1-49的随机数(原因见下面的说明),可以将41~49这样的随机数剔除掉,得到的数1-40仍然是均匀分布在1-40的,这是因为每个数都可以看成一个独立事件。
下面说明为什么(rand7()-1)*7+rand7()可以构造出均匀分布在1-49的随机数:

首先rand7()-1得到一个离散整数集合{0,1,2,3,4,5,6},其中每个整数的出现概率都是1/7。那么(rand7()-1)*7得到一个离散整数集合A={0,7,14,21,28,35,42},其中每个整数的出现概率也都是1/7。而rand7()得到的集合B={1,2,3,4,5,6,7}中每个整数出现的概率也是1/7。显然集合A和B中任何两个元素组合可以与1-49之间的一个整数一一对应,也就是说1-49之间的任何一个数,可以唯一确定A和B中两个元素的一种组合方式,反过来也成立。由于A和B中元素可以看成是独立事件,根据独立事件的概率公式P(AB)=P(A)P(B),得到每个组合的概率是1/7*1/7=1/49。因此(rand7()-1)*7+rand7()生成的整数均匀分布在1-49之间,每个数的概率都是1/49。

ps:用while(x>40)而不用while(x>10)呢?原因是如果用while(x>10)则有40/49的概率需要循环while,很有可能死循环了。

转载于:https://www.cnblogs.com/AnXiaoXi/archive/2013/04/09/3010695.html

【转】 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10...相关推荐

  1. java xml 节点路径,SelectSingleNode使用XPath为已知良好的xml节点路径返回null

    回答(9) 2 years ago 我强烈怀疑问题与名称空间有关 . 尝试摆脱名称空间,你会没事的 - 但显然这对你的实际情况没有帮助,我认为这个文件是固定的 . 我不记得如何在XPath表达式中指定 ...

  2. C语言编程>第十三周 ⑧ 已知学生的记录由学号和学习成绩组成,M名学生的数据已存入stu结构体数组中。请编写函数fun,该函数的功能是:

    例题:已知学生的记录由学号和学习成绩组成,M名学生的数据已存入stu结构体数组中.请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分).已给出函数的首部, ...

  3. java 取整_javascript 解决默认取整的坑(目前已知的最佳解决方案)

    javascript 解决默认取整的坑(目前已知的最佳解决方案) 复现该问题 js在数字操作时总会取更高精度的结果,例如1234/10结果就是123.4,但是在c或者java中整数除以10的结果还是整 ...

  4. 已知坐标求方位角_由方位角高度角求赤经赤纬

    接天体方位角和高度角的计算 - 且听风吟的文章 - 知乎 ,已知观测者的位置(地理坐标(b,l)),天体的位置也已知(赤道坐标(α,δ)),可以计算在某一给定时间(utc(y-m-d,h:m:s))天 ...

  5. python 判断数据类型,是否与已知相同

    1. 判断数据类型type(x) x = torch.randint(1,2,[2,2]) print(type(x)) <class 'torch.Tensor'> 2.判断是否与已知一 ...

  6. 已知空间中的三点 求三角形面积_【气宇轩昂】解三角形最值问题的四大模型尤其是第四种模型,简直不要太赞哦!!!...

    点击上方蓝色字体"高中数学王晖"关注王晖老师,免费获取各种知识干货和学习经验~~~您的点赞转发是对老师的最大鼓舞~~~ 距高考还有262天 1 三角函数有界性 在三角函数中,正弦函 ...

  7. C语言编程b a化简,C语言编程,已知三角形的三边长a,b,c,计算求三角... 如果三角形三边长 a,b,c,满足( )那么这个三角形......

    导航:网站首页 > C语言编程,已知三角形的三边长a,b,c,计算求三角... 如果三角形三边长 a,b,c,满足( )那么这个三角形... C语言编程,已知三角形的三边长a,b,c,计算求三角 ...

  8. 概率p输出1,概率1-p输出0,等概率输出0和1 【LeetCode】470. rand7()构造rand10() 系列变形(新浪、字节面试题)

    目录 1. 等概率输出0和1 1.1 题目描述 1.2 解题思路 & 代码 2. 以 1/N 的概率返回 1~N 之间的数 3. 给定函数rand5() 构造rand7() 或 rand7() ...

  9. (转载)由1-7的随机整数函数构造1-10随机整数函数

    题目: 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10. 分析:要保证rand10()在整数1-10的均匀分布,可以构造一个1-10*n ...

最新文章

  1. 作为数据科学家,我都有哪些弱点
  2. ipa 打包遇到的坑
  3. sqlserver 替换字符串中的数字_VBA实用小程序60: 替换图表SERIES公式中的字符串...
  4. 和push的区别_还没有理解let 和 const的用法和区别吗,几百字让你立马搞懂
  5. 建筑与计算机技术,建筑设计中常用的计算机技术与注意点
  6. 我写的不只是小说更是程序人生
  7. NumPy Cookbook 带注释源码 五、NumPy 音频和图像处理
  8. 关于图像高速缩放算法,目前看到的最好的最清晰的一篇文章2
  9. Linux源码编译即黑客帝国屏保cmatrix安装
  10. JavaScript 页面跳转、页面重定向
  11. matlab 电流平均值,电流平均值谐波检测方法MATLAB仿真
  12. 汽车电子行业入门指南「主要国内新能源车销量」
  13. 今天16:00 | 中科院计算所研究员孙晓明老师带大家走进量子的世界
  14. 产品周报第26期|富文本编辑器新增预览功能;博客首页增加上次阅读频道记录……
  15. java实现美图秀秀的照片拼接功能(照片数量任意)
  16. 每晚泡脚15分钟,5年下来有哪些变化
  17. 火星超大nasa开源全景图分享
  18. F矩阵的自由度是多少?
  19. 【MATLAB】线性规划问题中碰到绝对值的情况
  20. Spring Boot缓存实战 EhCache

热门文章

  1. 移动平台游戏网络重连方案
  2. 使用码云git的webhook实现生产环境代码的自动pull
  3. VMware 在ubuntu-18.04.2安装搜狗输入法
  4. sort 与 sorted 区别:
  5. 浏览器登陆时纪录自动登陆时限
  6. 【转载】target='_blank' 安全漏洞示例
  7. django入门三(视图)
  8. 在 Linux 上安装 Oracle 数据库 11g
  9. 第二阶段冲刺10天 第一天
  10. 杭电 2036 改革春风吹满地【求多边形面积】