如何在excel中生成不重复的随机数

如何在excel中生成不重复的随机数

如何在excel中生成不重复的随机数

例如在Excel中要产生166.16至166.27和不重复随机数。方法:

在单元格内输入=INT((RAND()*0.11+166.16)*100)/100 再把光标放在右下角,出现“+”时下拉

EXCEL中的随机函数

在EXCEL中设一个公式:=INT(RAND()(33-1)+1), 浏览次数:26次悬赏分:0 |解决时间:2011-7-15 23:48 |提问者:592379518 最佳答案 公式错误,乘号不能省. =INT(RAND()*(33-1)+1) 意思为:产生1~32的随机数,若要产生1~33的随机数,公式可改成: =1+ROUND(RAND()*(33-1),) 或者 =1+INT(RAND()*33) 用Excel随即函数=INT(33*RAND()+1)产生了随机函数,但是怎么让它一直固定某个数字不改变呢? 浏览次数:308次悬赏分:0 |解决时间:2011-4-20 17:35 |提问者:炒牛奶 比如我在A1输入:=INT(33*RAND()+1) 然后A1显示了一个随机数字,比如9 但是如果我在A2里面也输入:=INT(33*RAND()+1) 然后A2里面也出现了一个随机数字24,但是同时A1里面的随机数字再次随机了一下,变了 怎么样让A1第一次随机显示出9后,永远就是9,无论我后面在其他单元格再次输入随机函数,A1还是显示9不变 最佳答案 这个很简单呀,点菜单中的“工具”.点“选项”,点“重新计算”,“手动重算”那里打勾,确认就可以了.

要用EXCEL中的随机函数rand函数返回1-33之间的6个整数,该如何编程?如果在SPSS的环境里呢? 浏览次数:809次悬赏分:0 |解决时间:2010-5-15 06:45 |提问者:ibeauty_ftes 最佳答案 =INT(RAND()*(33-1+1)) 向下拖六行 要用EXCEL中的随机函数rand函数返回0-36之间的随机数,该如何做?试编辑一个公式达到该目的 浏览次数:1675次悬赏分:5 |解决时间:2007-9-3 14:30 |提问者:monkey2004574 最佳答案 =RAND()*36 EXCEL随机函数RAND() 浏览次数:1635次悬赏分:10 |解决时间:2008-3-30 11:16 |提问者:lizhidan1120 我想在0、5、10 中间随机生成一个数可以么? 该怎么做!!望高人指点!!谢谢!!!! 最佳答案 =IF(RAND()>0.3,IF(RAND()>0.6,10,5),0) 其他回答共1条十三级 =INT(RAND()*3)*5 已向网友提问等?

用C语言产生随机数

用c语言产生随机数 在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。 可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。 rand()会返回一随机数值,围在0至RAND_MAX 间。返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767),运算的结果是一个不定的数,要看你定义的变量类型,int整形的话就是32767。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。具体见下面的例子。 一如何产生不可预见的随机序列呢 利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。

在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值围从0~65535; 2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间) 3) 根据需要多次调用rand(),从而不间断地得到新的随机数; 4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。 下面是0~32767之间的随机数程序: #include #include #include //使用当前时钟做种子 void main( void ) {int i; srand( (unsigned)time( NULL ) ); //初始化随机数for( i = 0; i < 10;i++ ) //打印出10个随机数 printf( " %d\n", rand() ); } 根据上面的程序可以很容易得到0~1之间的随机数:

EXCEL随机数据生成方法

求教:我的电子表格中rand()函数的取值范围是-1到1,如何改回1到0 回答:有两种修改办法: 是[1-rand()]/2, 或[1+rand()]/2。 效果是一样的,都可生成0到1之间的随机数 电子表格中RAND()函数的取值范围是0到1,公式如下: =RAND() 如果取值范围是1到2,公式如下: =RAND()*(2-1)+1 RAND( ) 注解: 若要生成a 与b 之间的随机实数: =RAND()*(b-a)+a 如果要使用函数RAND 生成一随机数,并且使之不随单元格计算而改变,可以在编辑栏中输入“=RAND()”,保持编辑状态,然后按F9,将公式永久性地改为随机数。 示例 RAND() 介于0 到1 之间的一个随机数(变量) =RAND()*100 大于等于0 但小于100 的一个随机数(变量) excel产生60-70随机数公式 =RAND()*10+60 要取整可以用=int(RAND()*10+60) 我想用excel在B1单元个里创建一个50-80的随机数且这个随机数要大于A1单元个里的数值,请教大家如何编写公式! 整数:=ROUND(RAND()*(80-MAX(50,A1+1))+MAX(50,A1+1),0) 无需取整数:=RAND()*(80-MAX(50,A1))+MAX(50,A1)

要求: 1,小数保留0.1 2,1000-1100范围 3,不要出现重复 =LEFT(RAND()*100+1000,6) 至于不许重复 你可以设置数据有效性 在数据-有效性设 =countif(a:a,a1)=1 选中a列设有效性就好了 其他列耶可以 急求excel随机生成数字的公式,取值要在38.90-44.03之间,不允许重复出现,保留两位小数,不允许变藏 =round(RAND()*5+38.9,2) 公式下拉 Excel随机数 Excel具有强大的函数功能,使用Excel函数,可以轻松在Excel表格产生一系列随机数。 1、产生一个小于100的两位数的整数,输入公式=ROUNDUP(RAND()*100,0)。 RAND()这是一个随机函数,它的返回值是一个大于0且小于1的随机小数。ROUNDUP 函数是向上舍入数字,公式的意义就是将小数向上舍入到最接近的整数,再扩大100倍。 2、产生一个四位数N到M的随机数,输入公式=INT(RAND()*(M-N+1))+N。 这个公式中,INT函数是将数值向下取整为最接近的整数;因为四位数的随机数就是指从1000到9999之间的任一随机数,所以M为9999,N为1000。RAND()的值是一个大于0且小于1的随机小数,M-N+1是9000,乘以这个数就是将RAND()的值对其放大,用INT 函数取整后,再加上1000就可以得到这个范围内的随机数。[公式=INT(RAND()*(9999-1000+1))+1000] 3、Excel函数RANDBETWEEN是返回位于两个指定数之间的一个随机数。使用这一个函数来完成上面的问题就更为简单了。要使用这个函数,可能出现函数不可用,并返回错误值#NAME?。 选择"工具"菜单,单击"加载宏",在"可用加载宏"列表中,勾选"分析工具库",再单击"确定"。接下来系统将会安装并加载,可能会弹出提示需要安装源,也就是office安装盘。放入光盘,点击"确定",完成安装。 现在可以在单元格输入公式=RANDBETWEEN(1000,9999)。 最后,你可以将公式复制到所有需要产生随机数的单元格,每一次打开工作表,数据都会自动随机更新。在打开的工作表,也可以执行功能键F9,每按下一次,数据就会自动随机更新了。

java 生成一组不同的随机数(不重复)

本文由我司收集整编,推荐下载,如有疑问,请与我司联系 java 生成一组不同的随机数(不重复) 2017/03/22 0 import java.util.Random;/*** 生成一组不同的随机数* arr{1,2,3,4,5,6}* 比如随机生成了3 取出arr[3]=3,然后将arr{1,2,6,4,5,3} 数组模拟长 度减1* 比如随机生成了3 取出arr[3]=6,然后将arr{1,2,5,4,6,3} 数组模拟长度减1* @author pindu*/public class RamdomNums {public static void main(String[] args) {int num = 4;int min = 1;int max = 10;nums(num, min, max);System.out.println( ------------- for (int i = 0; i num; i ) {System.out.println(Math.random()*(max - min 1));}}public static void nums(int num,int min,int max) {//如果生成树目超出范围直接返回int len = max - min if (num len) {return ;}//生成有序数组int[] arr = new int[len];for (int i = 0; i len; i ) {arr[i] = i min;}//生成随机数int t = 0;while (num 0) {t = (int) (Math.random()*(max - min 1))%len;System.out.println(arr[t]);arr[t] = arr[--len];num--;}}} 结果 7192------------- 6.8698486251811616.2799489504900352.9301117297642018.195864045774911 tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

在excel中产生随机数

用excel产生随机数 统计软件提供的随机数发生器可以使我们对抽样分布进行计算机模拟,对抽样分布有更加直观的理解。Excel的分析工具库中有一个“随机数发生器”模块,可以产生服从大部分常用分布的模拟数据,但没有提供直接产生随机数的函数。在SPSS中产生随机数的函数在“Randomnumbers”类别中,相应的函数都是以Rv 开头的。 1 样本均值抽样分布的随机模拟 假总体的均值为μ,标准差为σ,则统计理论表明,不论总体的分布如何,只要样本容量n足够大,样本均值的分布总会趋向于正态分布,且均值为μ,标 准差为。 例题:假设总体为均匀分布,模拟样本均值的抽样分布。 假设总体的分布为0-1区间上的均匀分布,则总体的均值为0.5,方差等于 1/12,标准差等于0.288675。现在,我们从总体中抽取1000个样本容量为2的样本(有放回抽样),计算每个样本的样本均值,然后观察样本均值的分布状况。 新建一个Excel工作簿,单击“工具”“数据分析”“随机数发生器”,在弹出的对话框中把变量个数设为2,随机数个数为1000,选择0-1区间的均匀分布,结果放在新工作表中(图1)。把输出结果的每一行看作一个容量为2的样本,共有1000个样本。在C列中计算每个样本的均值。接下来我们就可以分析这1000个样本均值的分布状况了。由于SPSS的直方图工具更为方便,我们把相应的数据复制到SPSS中作直方图,结果如图2,抽样分布的均值为0.5097,标准差为 0.20345,理论值等于0.288675/ 2 =0.20412,两者差异不大。 图1 随机数发生器对话框

图2 样本均值的抽样分布,样本容量=2 2 样本比例抽样分布的随机模拟 样本比例实质上就是指标数值只能取0和1时的样本均值。由于在这种情况下总体的分布为0-1分布,因此在重复抽样的条件下样本均值抽样分布的理论分布是二项分布。中心极限定理表明当样本用量足够大(能够保证np≥5,nq≥5)时二项分布可以用正态分布来近似。 [例] 假设有大批零件,不合格率p为0.2。随机模拟从总体中抽取样本容量分别为5,20,50的2000个样本,分析样本比例p? 的抽样分布。 新建一个工作表,在单元格中输入图5-10左上角所示的信息作为总体:总体中取值为1(不合格)的概率为0.2,取值为0(合格)的概率为0.8。 图3 二项分布的随机模拟

Excel的随机数函数

Excel的随机数函数 1、生成随机数字(1)生成随机数比较简单,=rand()即可生成0-1之间的随机数;(2)如果要是整数,就用=int(rand())*10,表示0至9的整数,以此类推;(3)如果要生成a与b 之间的随机实数,就用=rand()*(b-a)+a,如果是要整数就用=int(rand()*(b-a))+a;稍微扩充一下,就能产生固定位数的整数了。注意:如果要使用函数rand()生成一随机数,并且使之不随单元格计算而改变,可以在编辑栏中输入“=rand()”,保持编辑状态,然后按F9,将公式永久性地改为随机数。不过,这样只能一个一个的永久性更改,如果数字比较多,也可以全部选择之后,另外选择一个合适的位置粘贴,粘贴的方法是点击右键,选择“选择性粘贴”,然后选择“数值”,即可将之前复制的随机数公式产生的数值(而不是公式)复制下来! 2、产生随机字母随机小写字母:=CHAR(INT(RAND()*26)+97) 随机大写字母:=CHAR(I NT(RAND()*26)+65) 随机大小写混合字母:=CHAR(INT(RAND()*26)+if(INT(RAND()*2) =0,65,97)) 3、随机不重复数字序列的生成方法 (1)在A1-A52间填入"=INT(RAND()*52)+1",产生1-52间的随机数,注意这里是有重复的 (2)在B1-B52间填入1-52 (3)在C54-BB54填入1-52 (4)在C1填入"=IF(ROW()=C$54,I NDEX(B$1:B$52,INDEX($A$1:$A$52,C$54)),IF(ROW()=INDEX($A$1:$A$52,C$54),INDEX (B$1:B$52,C$54),B1))"。分项解释: a:ROW()=C$54,如果当前行等于当前交换所排的序号 b:INDEX(B$1:B$52,INDEX($A$1:$A$52,C$54)),返回在B1到B52中选择A1:A 52中的第C54个值 c:IF(ROW()=INDEX($A$1:$A$52,C$54),否则的话,如果当前行等于A1:A52中第C54个值,则: d:INDEX(B$1:B$52,C$54),返回B1:B52中的第C54个值 e:若以上条件都不满足,则返回B1 (5)将C1复制到C1:BA52这个区域里面,在BA1: BA52中,我们就得到了一个不重复的随机序列,

产生不重复随机数方法

生成不重复的随机数的三种方法 下面我以生成1-10之间的10个不重复的随机数为例介绍生成不重复的随机数的三种方法: 1,通过while循环来实现 通过while循环不停的生成随机数,直到生成一个不重复的为止,这种方法比较容易想到,但是效率也比较低下,实例代码如下: static void Main(string[] args) { int[] result = new int[10]; int tmp = -1; Random random = new Random(); bool repeat = false; for (int i = 0; i < 10; i++) { repeat = true; while (repeat) { repeat = false; tmp = random.Next(1, 11); for (int j = 0; j < i; j++) { if (tmp == result[j]) { repeat = true; break; } } } result[i] = tmp; } for (int i = 0; i < 10; i++) Console.WriteLine(result[i].ToString()); } 2,通过for循环来实现 方法1使用了多处循环嵌套,效率十分低下,所以我应用一定的技巧来减少循环嵌套,来达到提高程序效率的目的。主要思路是如果检测到重复,就把循环变量减1,这样来重新进行一次循环,重新生成一个随机数,直到生成一个不重复的随机数为止,实例代码如下:static void Main(string[] args) { int[] result = new int[10]; int tmp = -1;

VB生成不重复的随机数

VB生成不重复的随机数 VB生成不重复的随机数 我的建议是:第一步、先做一个数组,存上这35个数(可以不是连续的数,也可以是人名、字符串什么的);第二步、随机生成一个1-35之间的数,输出;第三步:把这个数和数组的第一个单元交换;第四步、从数组的第2-35之间随机抽取第二个数,输出;第五步、把这随机抽取的第二个数和数组的第二个单元内容呼唤;第六步、随机抽取第三个数,输出。。。。。重复到从第35-35个数之间随机抽取一个数,这时直接输出最后一个就行了。 程序如下(VB6): 工程里默认的窗体上,画一个Command1,粘贴程序: option explicit private vArray(1 to 35) as currency '定义数组个数 private sub command1_click() test end sub private sub InitArray() dim i as long '给数组赋值 for i=1 to 35 varray(i)=i next i end sub private sub Test() dim iStart as long dim iPos as long dim vTemp as currency dim sReturn as string InitArray randomize timer '设置随机因子,使其每次运行程序的随机数都不一样iStart=1 do iPos=int(rnd*(ubound(vArray)-iStart+1))+iStart '产生iStart到35(35取自vArray 的上标)之间的整数

excel的生成随机数的函数用法

excel的生成随机数的函数用法 excel的生成随机数的函数用法: 生成随机数函数使用步骤1:首先介绍一下如何用rand()函数来生成随机数(同时返回多个值时是不重复的)。 如下图所示,在单元格中输入=rand(),回车后单元格即返回了一个随机数字。 生成随机数函数使用步骤2:rand()函数返回的随机数字的范围是大于0小于1。因此,也可以用它做基础来生成给定范围内的随机数字。 生成随机数函数使用步骤3:生成制定范围的随机数方法是这样的,假设给定数字范围最小是a,最大是b,公式是:=a+rand()*(b-a)。 生成随机数函数使用步骤4:举例来说,要生成大于60小于100的随机数字,因为(100-60)*rand()返回结果是0到40之间,加上范围的下限60就返回了60到100之间的数字。 生成随机数函数使用步骤5:上面rand()函数返回的0到1之间的随机小数,如果要生成随机整数的话就需要用randbetween()函数了,如下图该函数生成大于等于1小于等于100的随机整数。 生成随机数函数使用步骤6:这个函数的语法是这样的:=randbetween(范围下限整数,范围上限整数),结果返回包含上

下限在内的整数。注意:上限和下限也可以不是整数,并且可以是负数。 生成随机数函数使用步骤7:rand()和randbetween()是生成随机数的基础函数,也可以灵活变通。比如说要生成0.01至1之间包含两位小数的随机数,则可用下图的公式实现: 看了excel的生成随机数的函数用法还看了:1.excel用函数产生随机数的方法 2.怎么利用excel2010的自带的函数生成随机数 3.怎样用excel随机生成数字 4.excel怎么生成随机数 5.excel2010生成随机数的方法 6.excel2007怎么使用randbetween随机数函数 7.随机数函数randbetween在excel中的使用

随机数生成原理 实现方法 不同编程语言的随机数函数

1-0:Microsoft VC++产生随机数的原理: Srand ( )和Rand( )函数。它本质上是利用线性同余法,y=ax+b(mod m)。其中a,b,m都是常数。因此rand的产生决定于x,x被称为Seed。Seed需要程序中设定,一般情况下取系统时间作为种子。它产生的随机数之间的相关性很小,取值范围是0—32767(int),即双字节(16位数),若用unsigned int 双字节是65535,四字节是4294967295,一般可以满足要求。 1-1:线性同余法: 其中M是模数,A是乘数,C是增量,为初始值,当C=0时,称此算法为乘同余法;若C ≠0,则称算法为混合同余法,当C取不为零的适当数值时,有一些优点,但优点并不突出,故常取C=0。模M大小是发生器周期长短的主要标志,常见有M为素数,取A为M的原根,则周期T=M-1。例如: a=1220703125 a=32719 (程序中用此组数) a=16807 代码: void main( ) { const int n=100; double a=32719,m=1,f[n+1],g[n],seed; m=pow(2,31); cout<<"设置m值为"<>seed; f[0]=seed; for(int i=1;i<=n;i++) //线性同余法生成随机数 { f[i]=fmod((a*f[i-1]),(m-1)); g[i-1]=f[i]/(m-1); cout.setf(ios::fixed);cout.precision(6); //设置输出精度 cout<

用c语言产生随机数rand()

用c语言产生随机数rand() 在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。 可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。 rand()会返回一随机数值,范围在0至RAND_MAX 间。返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767)我运算的结果是一个不定的数,要看你定义的变量类型,int整形的话就是32767。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。具体见下面的例子。

一如何产生不可预见的随机序列呢 利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。 在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下: 1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535; 2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间) 3) 根据需要多次调用rand(),从而不间断地得到新的随机数; 4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。 下面是0~32767之间的随机数程序: #include #include #include //使用当前时钟做种子 void main( void ) {int i; srand( (unsigned)time( NULL ) ); //初始化随机数 for( i = 0; i < 10;i++ ) //打印出10个随机数

C#生成不重复的随机数介绍

C#生成不重复的随机数介绍 我们在做能自动生成试卷的考试系统时,常常需要随机生成一组不重复随机数的题目,在.net Framework中提供了一个专门用来产生随机数的类System.Random。 对于随机数,大家都知道,计算机不可能产生完全随机的数字,所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂 的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称作伪随机数。伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了。伪随机数的选择是从随机种子开始的,所以为了保证每次得到的 伪随机数都足够地“随机”,随机种子的选择就显得非常重要。如果随机种子一样,那么同一个随机数发生器产生的随机数也会一样。一般地,我们使用同系统时间有关的参数作为随机种子,这也是.net Framework 中的随机数发生器默认采用的方法。 我们可以使用两种方式初始化一个随机数发生器: 第一种方法不指定随机种子,系统自动选取当前时间作为随机种子:Random ro = new Random(); 第二种方法可以指定一个int型参数作为随机种子: int iSeed=10; Random ro = new Random(10); long tick = DateTime.Now.Ticks;

Random ran = new Random((int)(tick & 0xffffffffL) | (int) (tick >> 32)); 这样可以保证99%不是一样。 之后,我们就可以使用这个Random类的对象来产生随机数,这时候要用到Random.Next()方法。这个方法使用相当灵活,你甚至可以指定产生的随机数的上下限。 不指定上下限的使用如下: int iResult; iResult=ro.Next(); 下面的代码指定返回小于100的随机数: int iResult; int iUp=100; iResult=ro.Next(iUp); 而下面这段代码则指定返回值必须在50-100的范围之内: int iResult; int iUp=100; int iDown=50; iResult=ro.Next(iDown,iUp); 除了Random.Next()方法之外,Random类还提供了Random.NextDouble()方法产生一个范围在0.0-1.0之间的随机的双精度浮点数: double dResult;

不重复随机数列生成算法

不重复随机数列生成算法 本文将讲述一个高效的不重复随机数列的生成算法,其效率比通常用hashtable 消重的方法要快很多。 作者:eaglet 转载请注明出处。 首先我们来看命题: 给定一个正整数n,需要输出一个长度为n的数组,数组元素是随机数,范围为0 – n-1,且元素不能重复。比如 n = 3 时,需要获取一个长度为3的数组,元素范围为0-2, 比如 0,2,1。 这个问题的通常解决方案就是设计一个 hashtable ,然后循环获取随机数,再到 hashtable 中找,如果hashtable 中没有这个数,则输出。下面给出这种算法的代码 public static int[] GetRandomSequence0(int total) { int[] hashtable = new int[total]; int[] output = new int[total]; Random random = new Random(); for (int i = 0; i < total; i++) { int num = random.Next(0, total); while (hashtable[num] > 0) { num = random.Next(0, total); } output[i] = num; hashtable[num] = 1; } return output; } 代码很简单,从 0 到 total - 1 循环获取随机数,再去hashtable 中尝试匹配,如果这个数在hashtable中不存在,则输出,并把这个数在hashtable 中置1,否则循环尝试获取随机数,直到找到一个不在hashtable 中的数为止。这个算法的问题在于需要不断尝试获取随机数,在hashtable 接近满时,这个尝试失败的概率会越来越高。 那么有没有什么算法,不需要这样反复尝试吗?答案是肯定的。

java产生不重复随机数改进算法

虽然生成不重复的随机数算法, 但是百度一下后还是发现是重复计数的算法居多, 由于此算法可能会产生万中无一的死循环, 所以改进了此算法, 虽然改进的算法也可能产生万中无一的有规律的随机数, 但是能够保证程序的可运行性。 以下是用java写的算法源代码: import java.util.Random; public class Rand { int[] array, Rarry; int subscript, count; Random r; /** * init */ public Rand(int start, int end, int count) { subscript = end - start + 1; array = new int[subscript]; Rarry = new int[count]; r = new Random(); for (int i = 0; i < array.length; i++) { array[i] = i + start; } this.count = count; } /** * for show */ public void showOldArray() { System.out.println("\nold array:"); for (int i : array) { System.out.print(i + " "); } } public void showDeliverArray() { System.out.println("\ndeliver array:"); for (int i : Rarry) { System.out.print(i + " ");

产生不重复的随机数

产生不重复的随机数 Sub zjx() For i = 1 To 36 '如果改成200就是在1-200里选数 Cells(i, 1) = i Next c = [e2000].End(xlUp).Row Randomize a = 36 '上面改成200后这边也得更改成200 For i = 5 To 10 b = Int(a * Rnd() + 1) Cells( c + 1, i) = Cells(b, 1) Cells(b, 1).Delete Shift:=xlUp a = a - 1 Next End Sub 自己做个按钮,每点击一次增加一行。(vba,宏) 看我的吧 Sub Comm() Randomize Timer Dim c(100) As Byte For i = 1 To 100'产生100个随机数 c(i) = i Next k = 100 Do While l < 100 r = Int(Rnd() * k) + 1‘随机数的范围 aa = c(r)

c(r) = c(k) c(k) = aa k = k - 1 l = l + 1 cells(l,1)=aa Loop End Sub Sub suiji() c = Cells(65500, 5).End(xlUp).Row Randomize a = Second(Now()) For i = 5 To 10 line1: b = Second(Now()) x = Abs(Int(b * Rnd() - a - 7)) If x < 1 Then GoTo line1 End If With Range(Cells(c + 1, 5), Cells(c + 1, 10)) Set cc = .Find(x, lookat:=xlWhole) If cc Is Nothing Then Cells(c + 1, i) = x Else GoTo line1 End If

单片机产生随机数的方法

单片机产生随机数的方法 随机数在单片机的应用中也是很多的,当然产生随机数的方法有很多,当中有一个就是利用单片机定时器,取出未知的定时器THX和TLX的值,再加以运算得到一个规定范围内的随机数值。这做法也是可行的。或者预先写好一个随机数表,然后进行取数据。也是可以的。 KEIL里面产生随机数的函数确实是rand(),但头文件是stdlib.h,不是time.h。C语言提供了一些库函数来实现随机数的产生。C语言中有三个通用的随机数发生器,分别为rand 函数,random函数,randomize 函数;但是rand函数产生的并不是真意正义上的随机数,是一个伪随机数,是根据一个数,称之为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a);在调用rand函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。 单片机产生随机数的两种方法 方法一:定时器直接随机取值 每按一次按键生成一个随机数,这个随机数实际是把定时器的值给取出来了,并不能算绝对的随机、方法二才是真正意义上的随机。 方法二:用定时器加rand()随机函数来实现 单片机上电之后通过按键去启动取随机数,若是单片机上电就立即取随机数的话,那每次上电随机的结果都是一样的。然后是0 到9不重复的随机数,程序中用了循环来判断是否和前面取的随机数相同,相同则进入,下次取随机数,不同则存入数组。 本文是资深工程师分享的单片机C语言如何产生随机数的方法,欢迎广大工程师评论留言讨论,一起分享知识、成长和进步。

用EXCEL按比例生成随机数

用EXCEL按比例生成随机数(或叫按机率生成随机数) 这是百度知道一位同学的提问。要求生成范围为1到50的随机整数,并且,1-15的机率为50%,16-36的机率为30%,37-50的机率为20%。同时还要求生成500组,每组8个。 我当时给出一个公式: =if(rand()<0.5,round(rand()*14,0)+1,if(rand()<0.6,round(rand()*20,0)+16,round(r and()*13,0)+37)) 这里说下用round和用int的区别,用int生成16-36的随机数的话应该用 int(rand()*21+16),而用round可用round(rand()*20+16),这后面的+16放括号里面外面都一样,因为取整操作是由小数部分决定的。 还有我第二个if的判断用的是rand()<0.6而不是小于0.3,这是因为第二个if会执行的机率是50%,50%乘以0.6就是30%。 后来楼主同学又出怪招,要求每组无重复数字,每组从小到大排列。 这个只用单纯的公式的话不好办了。 我写了个VBA: Sub madeRnd() Dim i, j, k, a(8), flag, t Sheets("Sheet1").Select For k = 1 To 500 '生成一组随机数字 For i = 1 To 8 flag = 0 Do Randomize t = Rnd() If t < 0.5 Then a(i) = Int(Rnd() * 15 + 1) ElseIf t < 0.8 Then a(i) = Int(Rnd() * 21 + 16) Else a(i) = Int(Rnd() * 14 + 37) End If If i >= 2 Then For j = 1 To i - 1 If a(i) = a(j) Then flag = 1 Exit For Else

verilog和system verilog产生不重复随机数序列的方法

相信各位设计/验证工程师在写verilog testbench的时候都会需要产生随机数,如果你直接调用系统自带的$random系统函数的话,你会发现每次仿真产生的随机数序列是一样的,这是因为调用随机数系统函数时没有指定随机数种子,系统会直接调用默认的种子,所以每次产生随机数都用了同样的种子,那么随机数序列也就是一样的。下面提供两种产生每次都不一样的随机数序列的方法: 1.在vcs脚本中产生随机种子 在vcs脚本中添加: set seed ='' set seed =$$$$ +ntb_random_seed=$seed \ 这种方式只需要在bench中用$urandom就可以每次都产生不一样的随机数,如果要配置种子,则使用命令:run +seed=1234 2.在bench中产生随机种子 testbench中加入以下代码: import "DPI-C" function int c_random(); initial begin:random_seed_cap if($value$plusargs("SEED=%d",seed))begin $display(“use the outside seed”); end else begin seed = c_random(); $display(“the random seed = %d”,seed); end end 在bench中使用random_dat=$random(seed)就能产生不重复的随机数序列。 如果需要指定随机数种子,在run命令中加上:+SEED=1234就能指定这次仿真产生的随机数序列是以1234为种子。 文件:“c_random.c” #include #include #include #include"svdpi.h" #include"vpi_user.h" #include"veriuser.h" long int c_random() { long int seed; time(&seed);

Excel中进行随机函数给孩子出口算练习题的方法

Excel中进行随机函数给孩子出口算练习题的方法 如何用Excel随机函数给孩子出口算练习题,具体该去怎么去进行操作的呢?今天,小编就教大家在Excel中进行随机函数给孩子出口算练习题的方法。 Excel中进行随机函数给孩子出口算练习题的步骤接下来我们一起动手吧。新建一个Excel文件打开它,随便一个单元格输入下面的公式: =RANDBETWEEN(0,9) 这是一个随机函数,随机生成一个0到9的数字。您连续按F9试试! 我们用这个函数来出一套最简单的题:一位数乘法。 在最左上角的单元格,就是A1单元格输入下面的公式: =RANDBETWEEN(1,9)= 设置16号字体,在第一行每隔一列复制一个一共复制5个,然后下拉20行,行高34.5 一套100道的题出好了,预览一下打印效果! 记住:如果要求打印出来的每一份题都不一样,每打印一份前先按F9刷新一下。 接下来我们看一下除法题怎么出。如果不考虑有没有余数,也就是说是整除的或是带余数的都行,这种题比照第4步的方法即可,两位数除以一位数公式如下:

=RANDBETWEEN(10,99)= 如果只要整除的不要带余数的,需要先随机生成一个整数作为除数,然后用它乘以另外一个整数得到被除数,步骤如下: 1. A1单元格输入公式:=RANDBETWEEN(1,9) 生成一个1到9之间的除数。等公式全部做好以后,需要把它隐藏起来。 2. B1单元格输入公式:=RANDBETWEEN(1,9)*A1= 这才是最终的公式。 3. 把A1和B1单元格向右复制5份,中间要隔开一个单元格。 4. 下拉20行,行高34.5 5. 把生成被除数的那些列隐藏起来。 两位数整除一位数100道打印预览: 竖式题怎么出呢?下面举一个除法竖式的例子。 除法竖式出题步骤: 1. M1单元格输入公式:=RANDBETWEEN(10,999) 这是被除数种子,最后需要隐藏起来。 2. N1单元格输入公式:=RANDBETWEEN(2,9) 这是除数种子,最后需要隐藏起来。 3. P1单元格输入公式:=M1= 这是横式题目。 4. P3单元格输入公式:=) 上边框,和左边的)一起构成除法竖式的框架。

为什么excel中norminv(rand()-mean-standard-dev)可以产生符合正态分布的随机数教学文案

均值为1,标准差为0.3的正态分布概率密度函数图 4 4.2 4.4 4.6 4.8 5 5.2 5.4 5. 6 5.86 00.2 0.4 0.6 0.8 1 1.2 1.4 4 4.2 4.4 4.6 4.8 5 5.2 5.4 5. 6 5.8600.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

均值为1,标准差为0.3的正态分布概率分布函数图 首先看norminv 函数作用: norminv(v,mean,standard_dev)的作用是求出在均值为mean ,标准差为standard_dev 的正态分布函数曲线上对应纵轴为v 那个横轴数值。 即norminv 本质是正态概率分布函数的反函数。 然后找一个具体数值进行分析。 对于我们给定的均值为5,标准差为0.3的正态分布有()5.250.7977P X ≤=。 那通过y=norminv(rand(),5,0.3)(即让v=rand(),即让v 通过01均匀分布函数发生器rand ()产生,或者说v 分布符合01均匀分布)产生的随机数是否有()5.250.7977P y ≤=,或者说为什么当我们让v 通过01均匀分布函数发生器rand ()产生,就有()5.250.7977P y ≤=? 分析解释: 我们知道由于v 通过01均匀分布函数发生器rand ()产生,所以P(v ≤k)=k ,所以 ()0.79770.7977 P v ≤=,即v 出现在正态概率分布函数纵轴[0,0.7977]范围内的概率是0.7977.根据norminv 本质是正态概率分布函数的反函数可知,y=norminv(rand(),5,0.3)出现在正态概率分布函数图像横轴(-∞,5.25]范围内的概率也是0.7977,即()5.250.7977 P y ≤=

相关文档
最新文档