rand5()产生rand7()】的更多相关文章

http://www.cnblogs.com/dwdxdy/archive/2012/07/28/2613135.html 利用rand5()产生rand7().rand5()产生1到5的整数,rand7()产生1到7的整数. 解决思路与上述的练习题是一样的.利用rand5()产生的一个整数空间,然后将其映射到[1,7]的整数空间上,映射时保证概率相等,且等于1/7. 下面介绍几个有意思的实现. 1.利用预置数组 该方法简单,易理解,但是不具扩展性,需要额外存储空间. int rand7() {…
给一个方法,比如 rand5(), 它能够等概率生成 1-5 之间的整数. 所谓等概率就是1,2,3,4,5 生产的概率均为 0.2 .现在利用rand5(), 构造一个能够等概率生成 1- 7 的方法. 这里有两个特别重要的点,一是 如果 rand5() + rand5(), 我们能够产生一个均匀分布的1 - 10 吗? 答案是否定的.比如对于 6来讲(4+2, 2+4, 3+3),它被生成的生成的概率比1 (1+0,0+1)要大. 第二个点就是我们不可能用rand5()直接产生 1- 7 的…
题目:已知rand5()函数能随机等概率的生成0, 1, 2, 3, 4,利用rand5()函数编写一个rand7()函数实现相似的功能. 分析:其实就是利用rand5()组合成一个更大范围的数,之后利用求余(%)再映射到0-6之间. Java代码: int rand7() { //已知rand5()产生0,1,2,3,4,求rand7() int a; do { a = 5*rand5() + rand5(); //产生0-24 } while (a > 20); //只取0-20 retur…
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…
问题本身很明确,但不知道起个什么题目好,姑且先这么说吧. 问题描述:现在有一个叫做Rand5的函数,可以生成等概率的[0, 5)范围内的随机整数,要求利用此函数写一个Rand3函数(除此之外,不能再使用任何能产生随机数的函数或数据源),生成等概率的[0, 3)范围内的随机整数. 我第一次遇到这个问题的时候,着实犯了一回傻,自以为是地证明了这个题目是无解的.其实从概率的角度来看,题目的要求就是,利用一个1/5的概率源,通过某种方式产生出1/3的概率输出.我们都知道,概率运算法则有加法和乘法,而在我…
[本文链接] http://www.cnblogs.com/hellogiser/p/random-generator-with-equal-or-unequal-probability.html 1. 等概率生成 (1) rand5生成rand3 现在有一个Rand5函数,可以生成等概率的[0, 5)范围内的随机整数,要求利用此函数写一个Rand3函数(除此之外,不能再使用任何能产生随机数的函数或数据源),生成等概率的[0, 3)范围内的随机整数.  C++ Code  12345678910…
19 1  Write a function to swap a number in place without temporary variables void swap(int &a, int &b) { b = a - b; // 4 = 9 - 5 a = a - b; // 5 = 9 - 4 b = a + b; // 9 = 4 + 5 } void swap(int & a, int &b) { a = a^b; b = a^b; a = a^b; } 19…
randA()表示可以随机生成1--A的整数 rand7()生成rand5() int Rand5(){ int x = ~(1<<31); // max int while(x > 5) x = Rand7(); return x; } 证明:我们要的1可能是第一次调用Rand7时产生,也可能是第二次,第三次,-第n次. 第1次就生成1,概率是1/7:第2次生成1,说明第1次没生成1到5间的数而生成了6,7, 所以概率是(2/7)*(1/7),依次类推.生成1的概率计算如下: P(x=…
17.11 Implement a method rand7() given rand5(). That is, given a method that generates a random number between 0 and 4 (inclusive), write a method that generates a random number between 0 and 6 (inclusive). 这道题说给了我们一个rand5()函数,可以生成0到4之间的随机数,让我们写一个函数r…
若已知生成0~6的rand7(),求生成0~4的rand5(),则一个方法就是不断生成0~7的数,直到这个数满足0~4就返回. int rand5(){ int res; do{ res = rand7(); }); return res; } 现在已知生成0~4的rand5(),求解生成0~6的rand7(),就是想办法利用rand5()去生成0~大于6的数字,可以使用rand5()+rand5()*5,这个式子可以生成0~24的随机数,每个数字的组成只有一种可能,所以是等概率地生成0~24里…