`
alchimie
  • 浏览: 19612 次
  • 性别: 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());
		}
	}
}

 

分享到:
评论

相关推荐

    Matlab生成随机圆

    随机生成,要用到随机数生成函数,matlab有好几种,这里实现使用了rand和randi函数,不同的是一个实现的是double类型,一个生成的是int类型的值。 2.位置随机,当然就采用了球心坐标是随机数,随机数在给定区间之内...

    Excel公式与函数大辞典.宋翔(带书签高清文字版).pdf

    本书从函数功能、函数格式、参数说明、注意事项、Excel 版本提醒、案例应用、交叉参考7 个方面,全面、细致地介绍了Excel 2016/2013/2010/2007/2003 中公式和函数的使用方法、实际应用和操作技巧。最后3 章还将公式...

    利用Golang生成整数随机数方法示例

    生成一个给定范围的随机数,用 PHP 就太简单不过了,而且可以指定从负数到正整数的范围,如: &lt;?php echo mt_rand(-988, 888); 这样就随机生成 -988 到 888 的随机数。 使用 Go 就要稍微麻烦一点。以下两个函数...

    jsrand:在javascript中生成种子伪随机数

    鉴于该库的性能也可能会有所不同并成为一个因素,因此有一个例程旨在生成一组给定长度的随机数。 关于 这个库是模块化的。 它有一组通用函数和两个不同的生成器。 职能 seed (x) :将生成器播种到x 。 generate() ...

    randMat:在给定范围内均匀生成随机数或匹配给定正态分布-matlab开发

    对于均匀分布,MATLAB 函数 rand() 返回的值乘以 (ba),然后添加到 a。 对于正态分布,randn() 的输出乘以标准差 (b),然后与平均值 (a) 相加。 参数:(输入) a - (ix 1) 值的行向量,指定每个值的下限正态分布...

    人工智能实验五-旅行商问题

    通过给定城市的个数N、城市之间的最小、最大距离,通过MATLAB的rand函数生成一个N*N的距离矩阵(其对角线距离默认为0)。 2.初始化种群并且编码 可以把一个N个城市的旅行回路排列成一个N维向量,用它来表示一个...

    python:模拟退火算法解决函数优化问题(最小值、最大值)

    (3) Metropolis准则,若f(x1)-f(x0)&gt;0,接受该点(更新x0),且接受概率为p=exp(-(f(x1)-f0)/T),若p&gt;r(r为0-1上的随机数),接受该点(更新x0),否则放弃该点 (4)执行降温操作:T=T*k;返回(2)继续 (5)执行...

    c语言24点游戏(附源代码)

    首先进行四个数的随机输出(给定的范围是1到13),用rand()函数实现。 接着让用户输入,并对用户输入的进行判断,这里我用了数据结构里栈构造一个计算器对输入的进行运算。定义一个存储运算符的栈SNode_Symbol和一个...

    Matlab数学建模工具箱

    现在MATHMODL已成为一个普通的工具箱了。 % % 可以使用命令help mathmodl查看内容或直接用命令mathmodl学习教程。 % % 数据拟合 % interp1 - 一元函数插值 % spline - 样条插值 % polyfit - 多项式插值或拟合 % ...

    LuaBind 源码 (Lua增强库)

    为了调用一个Lua函数, 你可以或者用 call_function() 或者用 一个对象(object). template Ret call_function(lua_State* L, const char* name, ...) template Ret call_function(object const& obj, ...) call_...

    rand_sort:具有不确定性能特征的数组排序

    我们正在修补一个谓词函数,以检查给定的Enumerable / Array是否已排序,然后修补一个新的排序“算法”,该算法以递归方式洗净Enumerable / Array,直到对其进行排序 在我的机器上经过大约8个长度后,它完全将堆栈...

    LINGO软件的学习

    ① 当显式罗列成员时,必须为每个成员输入一个不同的名字,中间用空格或逗号搁开,允许混合使用。 例2.1 可以定义一个名为students的原始集,它具有成员John、Jill、Rose和Mike,属性有sex和age: sets: students/...

    C/C++产生指定范围和不定范围随机数的实例代码

    不指定范围产生随机数用到函数rand(),函数原型为int rand(),无参数。此时会产生一个介于0~RAND_MAX间的整数。RAND_MAX的大小可以查看,在include文件夹(linux在usr目录、windows在安装目录)的stdlib.h可以看到...

    python numpy之np.random的随机数函数使用介绍

    np.random的随机数函数(1) 函数 说明 rand(d0,d1,..,dn) 根据d0‐dn创建随机数数组,浮点数, [0,1),均匀分布 ...根据d0‐dn创建随机数数组,标准正态...a = np.random.rand(3, 4, 5) a Out[3]: array([[[0.2

    ParseVarArgIn:解析参数列表。 给定一组属性名称,它为变量分配适当的值-matlab开发

    例如,如果你调用一个函数,foo: foo(in,'颜色','绿色','魅力',5); 在 foo 中,您调用 PARSEVARARGIN: ParseVarargin({'Color','Charm','Strangeness'}); PARSEVARARGIN 将创建一个变量颜色,值为“绿色”,一个...

    实验室 2 - 数字信号处理。 FIR 过滤:适当的报告、代码文件、函数和图形一起添加到存档中。-matlab开发

    练习 1.1:通过直接卷积过滤随机信号编写一个 MATLAB 程序(a) 生成 50 个样本的随机输入信号,其幅度均匀分布在 -2 和 3(参见 rand 函数文档); (b) 通过直接卷积 1 与滤波器脉冲响应 h(n) ... (c) 在同一张图上画...

    数学建模真题matlab编程 MATLAB数学建模工具箱

    % *specrnd - 给定分布律随机数生成 % *randrow - 整行随机排列 % *randmix - 随机置换 % *chi2test - 分布拟合度卡方检验 % % 数学规划 % lp - 线性规划 % linprog - 线性规划(在MATLAB5.3使用) % fmin - 一元函数...

    crypto-projects:所有以及任何与密码学有关的工具或项目

    1.查找随机整数 目的是在给定前两个“随机”数字的情况下“预测”正在生成的第三个数字 被利用的函数是Java Random类中的nextInt(): int n1 = rand.nextInt(); int n2 = rand.nextInt()...用给定的加密密钥生成密文

    MATLAB数学建模工具箱

    现在MATHMODL已成为一个普通的工具箱了。 % % 可以使用命令help mathmodl查看内容或直接用命令mathmodl学习教程。 % % 数据拟合 % interp1 - 一元函数插值 % spline - 样条插值 % polyfit - 多项式插值或拟合 % ...

Global site tag (gtag.js) - Google Analytics