`
alchimie
  • 浏览: 20452 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

给定一个函数rand5()用其生成等概率的rand7()

 
阅读更多

8月份遇到的一个面试题,整理了下解法:

/**
 *   题目:给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一样。现
 *   要求使用该函数构造函数rand7(),使函数rand7()可以随机等概率的生成1-7
 *   的整数。
 *   
 *   解题:这种思想是基于,rand()产生[0,N-1],把rand()视为N进制的一位数产生器,
 *   那么可以使用rand()*N+rand()来产生2位的N进制数,以此类推,可以产生3位,
 *   4位,5位...的N进制数。这种按构造N进制数的方式生成的随机数,必定能保证
 *   随机,而相反,借助其他方式来使用rand()产生随机数(如 rand5() + rand()%3 )
 *   都是不能保证概率平均的。 此题中N为5,因此可以使用rand5()*5+rand5()来产生
 *   2位的5进制数,范围就是1到25。再去掉22-25,剩余的除3,以此作为rand7()的
 *   产生器。
 */
public class Rand7 {
	Random random = new Random();
	
	int rand5(){
		return random.nextInt(5) + 1;
	}
	
	/*
	 *   0 5  10 15 20   //5 * (rand5() - 1)
	 *   -------------
	 *   1 6  11 16 21
	 *   2 7  12 17
	 *   3 8  13 18
	 *   4 9  14 19
	 *   5 10 15 20
	 */
	int rand7()
	{
		int x = 0;
		do{
			x = 5 * (rand5() - 1) + rand5();
		}while(x > 21);
		return 1 + x%7;
	}
	
	public static void main(String args[]){
		Rand7 r = new Rand7();
		for (int i = 0; i < 100; i++) {
			System.out.println(r.rand7());
		}
	}
}

 

分享到:
评论

相关推荐

    WPS怎么用rand及round函数生成符合要求的随机数.pdf

    使用方法非常直观,只需在需要生成随机数的单元格内输入`=RAND()`,然后回车,该单元格就会显示一个随机小数。若需在同一列或行中生成多个随机数,可选中已生成随机数的单元格,然后拖动填充柄向下或向右扩展,即可...

    matlab开发-1随机数生成,具有任意分析表示概率密度函数

    当生成一个在[0,1]区间内的随机数 `y`(由`rand`函数提供)时,通过 `x = F^-1(y)` 我们可以得到符合原始PDF的随机数 `x`。 文件`rand_generator.m`很可能包含了实现这一过程的MATLAB代码。它可能包括以下步骤: 1....

    matlab函数文件,构造N个随机数的总和为某个值

    3. 处理特殊情况:例如,当N=1时,函数可能需要特殊处理,因为只有一个数,其值就必须直接等于S。 在实践中,这类函数常常用于模拟实验、统计分析或者算法的测试。例如,可以生成一组随机数来模拟股票价格波动,...

    excel如何确定几个未知数之和刚好等于给定的总和值.docx

    RAND 函数是 Excel 中的一个随机数生成函数,其取值范围为 (0,1]。该函数可以用来生成随机数,例如 =RAND()*10 将生成一个介于 0 和 10 之间的随机数。 二、通过总和值 M 推算出几个未知数的理论 假设给定一个总和...

    PHP程序设计-3期(KC016) 2.9.1 rand函数 拓展知识.doc

    在这些情况下,可以使用`random_int()`函数,它是PHP 7引入的一个安全的随机整数生成器,适用于加密和其他安全敏感的用途。 总之,`rand()`函数是PHP中生成随机整数的基础工具,配合其他函数和技巧,可以满足各种...

    MATLAB概率分布函数

    - 类似地,`betacdf`, `binocdf`, `chi2cdf`等函数用于计算一个值在对应概率分布下的累积概率,即小于或等于该值的概率。例如,`normcdf`可以计算出一个值在正态分布中累积到该点的概率。 3. **累积分布函数的逆...

    Excel函数查询手册

    PROB函数返回一个区间内的概率,该区间是在一组数值的累积分布函数基础上指定的。 ### QUARTILE.EXC函数 QUARTILE.EXC函数返回一组数据的四分位数。 ### QUARTILE.INC函数 QUARTILE.INC函数返回一组数据的四分位数...

    给定 pmf:n=rand_gen(x,pmf,N) 生成随机数 从所需的 pmf 生成一个长度为 N 的随机信号。-matlab开发

    `rand_gen`函数的工作原理是:它会根据输入的pmf生成随机数,使得生成的每个随机数对应pmf中的一个值,且生成的频率与pmf中的概率相对应。在这个例子中,我们期望生成的100个随机数中,大约有1/3的值为1,1/3的值为3...

    用C语言编写正态分布函数

    - 函数`Show(RNG& rng)`:接受一个随机数生成器对象作为参数,然后生成并显示随机数。 4. **主函数**: - 创建随机数生成器实例`GenType gt;`。 - 设置正态分布参数`NormalDis dis(30, 2);`(均值为30,方差为4...

    PB函数大全-所有PB函数最全的一次 .docx

    1. Abs() 函数:这个函数用于计算一个数值的绝对值。例如,如果变量`num`的值是-5,`Abs(num)`将返回5。如果`num`是NULL,函数将返回NULL。 2. Ceiling() 函数:这个函数返回大于给定数值的最小整数。例如,`...

    rand_source.rar_random

    在给定的“rand_source.rar_random”压缩包中,包含两个关键文件:rand_source.c 和 rand_source.h,它们是实现一个基于/dev/random的随机源的源代码和头文件。 首先,让我们详细了解一下/dev/random。在Unix-like...

    excel函数实例教程.pdf

    RAND函数生成一个大于等于0且小于1的随机数。 14. ROUND、ROUNDDOWN和ROUNDUP函数 ROUND函数根据指定的位数对数值进行四舍五入。语法为ROUND(number, num_digits)。ROUNDDOWN函数向下舍入到指定的位数,语法为ROUND...

    MATLAB中生成随机数方法总结

    - `rand(n)` 生成一个n×1的向量,其中每个元素都是[0, 1)区间的随机数。 - `rand(m, n)` 生成一个m×n的矩阵,矩阵中的每个元素都是[0, 1)区间的随机数。 2. **randn函数**: - `randn()` 同样生成一个浮点数,...

    Java实现 LeetCode 470 用 Rand7() 实现 Rand10()

    在LeetCode的第470题“用Rand7()实现Rand10()”中,我们需要设计一个`rand10()`函数,它能生成1到10之间的均匀随机整数,但只能利用已有的`rand7()`函数,该函数可以生成1到7之间的随机整数。题目明确指出不允许使用...

    详解PHP中array_rand函数的使用方法

    在PHP编程语言中,`array_rand`函数是一个非常实用的工具,它允许开发者从给定的数组中随机选择一个或多个元素。这篇文章将深入探讨`array_rand`的使用方法、性能以及相关的应用实例。 `array_rand`函数的基本语法...

    matlab生成随机数+源代码

    例如,`rand()`将返回一个0到1之间的浮点数,而`rand(n)`将生成一个n×1的列向量,每个元素都是[0, 1)内的随机数。`rand(m, n)`则会生成m×n的矩阵。 ### 正态分布的随机数 如果需要生成标准正态分布(均值为0,...

    数据结构 最小生成树C代码

    3. 最小生成树的生成:我们使用了一个名为MFSet的类来实现克鲁斯卡尔算法,该类中包括了两个主要函数:root函数用于查找元素的根节点,Tmerge函数用于合并两个集合。我们使用了一个名为main的函数来调用这些函数,...

    matlab 函数大全 函数库

    - **`rand(m,n)`**:生成一个m×n的矩阵,其元素在0到1之间随机分布。这是生成随机数矩阵的最基本函数。 - **特定分布的随机数生成**:MATLAB提供了多种分布的随机数生成函数,如`betarnd`、`binornd`、`chi2rnd`等...

    SQL自定义函数讲解

    `SQUARE()`返回表达式的平方,`POWER()`计算一个数的指定次方,`SIGN()`确定数值的正负性,而`RAND()`生成0到1之间的随机数。 2. **聚合函数**:如`SUM()`, `AVG()`, `MAX()`, `MIN()`, `COUNT()`,它们在一组值上...

Global site tag (gtag.js) - Google Analytics