浅析 rand7生成rand10 方法 之 代码篇(二)
来源:互联网 发布:湖北广电网络武汉有线 编辑:程序博客网 时间:2024/05/01 19:36
【问题描述】
已知有个rand7()的函数,返回1到7随机天然数,让你用rand7()生成rand10(),随机1~10。
【源码实现】
方法一:(rand7()-1)*7 + rand7()
rand7()- 1获得一个离散整数凑集{0,1,2,3,4,5,6}
(rand7()-1)*7获得一个离散整数凑集A={0,7,14,21,28,35,42}
rand7()获得的凑集B={1,2,3,4,5,6,7}
此时A和B中的元素属于自力事务,因为A和B中的任意元素相加,得到的结果是不重复的。按照自力事务的概率公式P(AB)=P(A)P(B)计算。(rand7()-1)*7+rand7()生成1-49之间,每个数的概率都是1/49。
int rand10(){ int x=0; do { x=(rand7()-1)*7+rand7(); } while(x>40); return x%10+1;}方法二:
思想是把1到10这10个数分成2个集合(1,3,5,7,9)(2,4,6,8,10)
rand7 构造出 rand5,此时就能得到等概率的一个集合,(1,3,5,7,9)或者(2,4,6,8,10)。
int rand5() { int x=0; do { x = rand7(); } while(x>5); return x; }
用rand7构造出rand2
int rand2() { int x=0; while(1) { x = rand7(); if (4 == x) continue; if (x <= 3) return 1; else return 2; } }最后用rand2和rand5构造rand10
int rand10() { int x=0, y=0; x = rand2(); y = rand5(); if (1 == x) return 2*y-1; //奇数集合 else return 2*y; //偶数集合 }
0 0
- 浅析 rand7生成rand10 方法 之 代码篇(二)
- 浅析 rand7生成rand10 方法 之 思想篇(一)
- rand7生成rand10
- 由rand7生成rand10以及随机数生成方法的讨论
- 由rand7生成rand10以及随机数生成方法的讨论
- 由rand7生成rand10以及随机数生成方法
- 由rand7生成rand10以及随机数生成方法的讨论
- 由rand7生成rand10以及随机数生成方法的讨论
- 【每天学点算法题10.16】由rand7()生成rand10()
- 用rand7()构造rand10()
- 已知rand7(),求rand10().
- 已知rand7(),求rand10()
- 用rand7()构造rand10()
- 已知rand7(),求rand10().
- rand7()构造rand10()
- Generate rand10() from rand7()
- 用rand7()构造rand10()
- 随机数:关于用Rand7生成Rand10的最准确的算法(MS中的一道题)--仿真证明
- 容易导致腹泻的八种食物搭配
- 理解RESTful架构
- LINUX 笔记
- Android使用XML的方式为背景添加渐变,描边,圆角的效果
- FFmpeg常用基本命令
- 浅析 rand7生成rand10 方法 之 代码篇(二)
- 三年过去了,小米为何还不指纹解锁?
- 演讲大厅安排 解题报告
- nc推单---弹出新单据框
- STM32定时器PWM输出
- Directshow 的前世今生,兼谈Media Foundation
- C调用java代码
- POJ---3349-Snowflake Snow Snowflakes(hash)
- IO-02 整数四则运算