JAVA随机数之多种方法从给定范围内随机N个不重复数

JAVA随机数之多种方法从给定范围内随机N个不重复数
JAVA随机数之多种方法从给定范围内随机N个不重复数

其乘以一个数,比如25,就能得到一个0~25范围内的随机数,这个在j2me中没有;Java代码

定的局限性!

Java代码

相同的顺序调用相同的函数,那它们返回值完全相同。

Java代码

1、方法一:最简单最易理解的两重循环去重

Java代码

2、方法二:利用HashSet的特征,只能存放不同的值Java代码

3、方法三:排除已随机到的数Java代码

调用实例:Java代码

AS3.0不重复的随机数代码

as3获得不重复的随机数的不同写法方法一: var b:Array =new Array(); for (var i:int=0; i<10; i++) { b.push(i); } for (var j:int=0; j<10; j++) { var index:int = Math.round(Math.random()*b.length); b.splice(index,1); trace(b[index]); } /* splice(start,deleteCount)方法:给数组从start(索引)开始删除deleteCount个元素。此方法会修改数组但不制作副本。*/ AS3取随机数方法二 今天需要用到随机数,我还以为像java有个随机数类,结果在Math 类里面,我需要取的是整数,0-15,取10个,不能重复,代码如下: var itn:Array = new Array(); while(itn.length != 10){ //最主要的代码就是下面这句,你要取多大,后面模一下,我觉得这样挺方便的~ var temp:int = (Math.random()*1000>>0)%16; trace("这次出来的是: "+temp); if(itn.length != 0){ for(var h:int = 0;h

if(temp == itn[h]){ h = 0; temp = (Math.random()*1000>>0)%16; } } } itn.push(temp); } trace("全部数字是: "+itn); 【AS3】取N个不重复的随机数方法三 function RandomArray(n:int):Array { var my_array:Array=new Array(); var i:int=0; for (i=0; i

用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之间的随机数:

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:感谢大家的阅读,本文由我司收集整编。仅供参阅!

C语言中产生随机数的方法

C语言中产生随机数的方法 引例:产生10个[100-200]区间内的随机整数。 #include #include //rand函数的头文件 #include //时间函数的头文件 int main() { int i; //循环变量 srand((unsigned) time(NULL)); //产生随机数的起始数据(以时间为种子) for (i=0; i<10; i++) //printf("%d\n", rand()); //产生[0,0x7fff)即[0,32767)以内的随机整数 //printf("%d\n", rand()%100); //产生0-99的随机整数 printf("%d\n", rand()%(200-100+1) + 100); //产生[100,200]内的随机整数return 0; } 在C语言中产生随机数需要以下几个函数的配合使用。 (1)rand函数——产生伪随机数 原型:int rand(void) 头文件:stdlib.h 功能:产生从0到RAND_MAX之间的随机数。RAND_MAX的值通常是0x7fff(十六进制数7FFF,也就是十进制数32767)。 例: #include #include int main() { int k; k = rand(); printf("%d\n", k); return 0; } 编译运行,发现每次运行程序产生的随机数都是一样的。 计算机中产生随机数,实际是采用一个固定的数作为“种子”,在一个给定的复杂算法中计算结果,所以叫“伪随机数”。 C语言中由于采用固定的序列作为种子,所以每次执行所取的是同一个数。 为上面的例子增加一个循环结构: #include #include int main() { int k,i;

随机数生成器

随机数生成器 一、随机数 1.1随机数的概念 数学上是这样定义随机数的:在连续型随机变量的分布中,最简单而且最基本的分布是单位均匀分布。由该分布抽取的简单子样称为随机数序列,其中每一个体称为随机数。单位均匀分布即[0,1]上的均匀分布。由随机数序列的定义可知,ξ1,ξ2,…是相互独立且具有相同单位均匀分布的随机数序列。也就是说,独立性、均匀性是随机数必备的两个特点。 1.2随机数的分类 随机数一般分为伪随机数和真随机数。利用数学算法产生的随机数属于伪随机数。利用物理方法选取自然随机性产生的随机数可以看作真随机数。实用中是使用随机数所组成的序列,根据所产生的方式,随机数序列再可以分为两类: 1.伪随机数序列 伪随机数序列由数学公式计算所产生。实质上,伪随机数并不随机,序列本身也必然会重复,但由于它可以通过不同的设计产生满足不同要求的序列且可以复现(相同的种子数将产生相同的序列),因而得到广泛的应用。由伪随机数发生器所产生的伪随机数序列,只要它的周期足够长并能通过一系列检验,就可以在一定的范围内将它当作真随机数序列来使用。 2.真随机数序列 真随机数序列是不可预计的,因而也不可能出现周期性重复的真正的随机数序列。它只能由随机的物理过程所产生,如电路的热噪声、宇宙噪声、放射性衰变等。 按照不同的分类标准,随机数还可分为均匀随机数和非均匀随机数,例如正态随机数。 1.3随机数的衡量标准 在实际模拟过程中,我们一般只需要产生区间[0,1]上的均匀分布随机数,因为其他分布的随机数都是由均匀分布的随机数转化来的。 实用中的均匀随机数主要通过以下三个方面来衡量其随机性能的高低。 1.周期性 伪随机数序列是由具有周期性的数学公式计算产生,其本身也必然会表现出周期性,即序列中的一段子序列与另一段子序列相同。它的周期必须足够长,才能为应用提供足够多的可用数据。只有真随机数序列才能提供真正的、永不重复的随机数序列。 2.相关性 随机数发生器所产生的一个随机数序列中的各个随机数应该不相关,所产生的各个随机数序列中的随机数也应该不相关。真随机数序列自然地满足这种不相关性。对于伪随机数发生器,应该仔细地设计所用的数学公式,以尽量满足不相关的要求。 3.分布均匀性 包括蒙特卡洛计算在内的大多数应用都要求所采用的随机数序列服从均匀分布,即同一范围内的任一个数出现的概率相同。从均匀分布的随机数序列也很容易导出其它类型分布的

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,每按下一次,数据就会自动随机更新了。

产生不重复随机数方法

生成不重复的随机数的三种方法 下面我以生成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;

真随机数产生方法

ATmega1 28单片机的真随机数发生矗时间:2009-12-16 15:39:00 来源:单片机与嵌入式系统作者:刘晓旭,曹林,董秀成西华大学 ATmega1 28单片机的真随机数发生矗时间:2009-12-16 15:39:00 来源:单片机与嵌入式系统作者:刘晓旭,曹林,董秀成西华大学 引言 随机数已广泛地应用于仿真、抽样、数值分析、计算机程序设计、决策、美学和娱乐之中。常见的随机数发生器有两种:使用数学算法的伪随机数发生器和以物理随机量作为发生源的真随机数发生器。要获取真正随机的真随机数,常使用硬件随机数发生器的方法来获取。这些真随机数都是使基于特定的真随机数发生源(如热噪声、电流噪声等),每次获取的真随机数都是不可测的,具有很好的随机性。 真随机数因其随机性强,在数据加密、信息辅助、智能决策和初始化向量方面有着广泛应用,构建一种基于硬件真随机数发生源,具有广泛的应用价值。但目前硬件真随机数发生源均较复杂,而且很少有基于单片机的真随机数发生器。本文利用RC充放电的低稳定度,根据AVR单片机的特点设计了一种性价比极高的真随机数发生器。该随机数发生器使用元件很少,稳定性高,对一些价格敏感的特殊场合,如金融、通信、娱乐设备等有较大的应用意义。 1 基本原理和方法 1.1 基本原理 串联的RC充放电电路由于受到漏电流、电阻热噪声、电阻过剩噪声、电容极化噪声等诸多不确定性因素的影响,其充放电稳定度一般只能达到10-3。利用这种RC充放电的低稳定度特性实现廉价的真随机数发生源。 Atmel公司AVR单片机ATmega 128以其速度快、功能强、性价比高等优点广泛应用于各种嵌入式计算场合。利用AVR单片机引脚配置灵活多样的特点,使用Amnega128 两个I/O口作为真随机数的电气接口。 其原理如图1所示。主要原理是利用串联RC电路的不确定性产生真随机数源,收集数据,通过AVR单片机ATmega128和主时钟电路量化RC电路的充放电时问,获得不确定的2位二进制数据,再利用程序将每4次采集的数据综合,最后产生1个8位的真随机数。

随 机 数 生 成 器

使用python实现伪随机数生成器 在前两天学习了使用python实现伪随机数的方法,今天是时候来做一个总结了。 首先要说明的是什么是随机数,真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。产生这些随机数的方法有很多种,而这些产生随机数的方法就称为随机数生成器。像前面说的由物理现象所产生的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高。 但是在我们的实际生活中广泛应用的是伪随机数生成器,所谓的“伪”就是假的的意思,也就是说并不是真正的随机数。那么这些随机数是怎么实现的呢?这些数字是由固定的算法实现的,是有规律可循的,并不能实现真正的“随机”,但是它们具有类似于随机数的统计特征。这样的发生器叫做伪随机数发生器。 实现伪随机数的方法有很多种,如:平方取中法,线性同余法等方法。 下面主要介绍的是线性同余法,如C的rand函数和JAVA的java.util.Random类就是使用该方法实现的,其公式为:rNew = (a*rOld + b) % (end-start) 其中, a称为乘数,b称为增量,(end-start)称为模数,它们均为常数。 然后设置rOld = rNew,一般要求用户指定种子数rOld(也称为

seed),当然也可以自由选择a和b,但是两个数如果选择不好,可能会影响数字的随机性,所以一般令: a=32310901 这样使得生成的随机数最均匀。下面我是用的将种子自定义设为999999999。代码如下: def myrandint( start,end,seed=999999999 ): a=32310901 #产生出的随机数最均匀 rOld=seed m=end-start while True: #每调用一次这个myrandint函数,才生成一次随机数所以要惰性求值 rNew = (a*rOld+b)%m yield rNew rOld=rNew #模拟使用20个不同的种子来生成随机数 for i in range(20): r = myrandint(1,10000, i) #每个种子生成10个随机数 print('种子',i,'生成随机数') for j in range(10): print( next(r),end=',' ) 运行结果是使用20个不同的种子生成的随机数。

js取不重复的随机数(实例)