




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、csharp快速连续产生相同随机数的解决方案总结c# Random快速连续产生相同随机数的解决方案Random类是一个产生伪随机数字的类,它的构造函数有两种,一个是直接 NewRandom,另外一个是 NewRandom(lnt32),前者是根据触发那刻的系统时间做为种子,来产生一个随机数字,后者 可以自己设定触发的种子,一般都是用UnCheck(lnt)做为参数种子,因此如果计算机运行速度很快,如果触发 Randm函数间隔时间很短,就有可能造成产生一样的随机数,因为伪随机的数字,在Random的内部产生机制中还是有一定规律的,并非是真正意义上的完全随机。Random快速连续产生相同随机数的解
2、决方案:1、延时的办法。可以米用for循环的办法,也可以米用(100); 2 、提高随机数不重复概率的种子生成方法Random 类 命名空间:System 表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备。伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,因为它们是用一种确定的 数学算法选择的,但是从实用的角度而言,其随机程度已足 够了。伪随机数的生成是从种子值开始。如果反复使用同一个种子,就会生成相同的数字系列。产生不同序列的一种方法是使种子值与时间相关,从而对于Random的每个新实例,都会产生不同的系列。默认情况下,Random类的无参数
3、构造函数使用系统时钟生成其种子值,而参数化构造函数可根据当前时间的计时周期数采用 Int32值。但是,因为时钟 的分辨率有限,所以,如果使用无参数构造函数连续创建不 同的Random对象,就会创建生成相同随机数序列的随机数生成器。通过创建单个而不是多个Random对象可以避免此问题。若要提高性能,请创建一个随时间推移能生成多个随机数的Random对象,而不要反复新建会生成同一个随机数的Random 对象。Ran dom成员名称说明Equals 确定指定的 Object是否等于当前的Object oFinalize允许Object 在“垃圾回收”回收Object之前尝试释放资源并执行其他清理操作
4、。GetHashCode 用作特定类型的哈希函数。GetType 获取当前实例的 Type。MemberwiseClone 创建当前 Object的浅表副本。Next 已重载。返回随机数。NextBytes 用随机数填充指定字节数组的元素。NextDouble 返回一个介于 和 之间的随机数。Sam pie 返回一个介于和 之间的随机数。ToString 返回表示当前 Object 的 String 。用C#生成不重复的随机数中国IT实验室收集整理20XX-4-2我们可以使用两种方式初始化一个随机数发生器:第一种方法不指定随机种子,系统自动选取当前时间作为随机种子:Random ro = ne
5、w Random ;第二种方法可以指定一个int型参数作为随机种子:int iSeed=10;Random ro = new Random(10); long tick =;Random ran = new Random(int)(tick & 0xffffffffL)| (int) (tick 32);这样可以保证99%不是一样。之后,我们就可以使用这个Random类的对象来产生随机数,这时候要用到 方法。这个方法使用相当灵活,你甚至可以指定产生的随机数的上下限。不指定上下限的使用如下:int iResult; iResult=;/ 产生一个非负数的乱数Illp ublic量较小的题目中要生
6、成不重复的的题目是很难的。参考了int iUp=100;iResult=(iU p);而下面这段代码则指定返回值必须在50-100的范围之内:int iResult; int iUp=100; int iDown=50;iResult=(iDown,iU p);除了方法之外,Random类还提供了方法产生一个范围之间的随机的双精度浮点数:double dResult;dResult=;号,但是用Random类生成题号,会出现重复,特别是在数网上的一些方法,找到两类解决方法,一类是通过随机种子入手,使每一次的随机种子不同,来保证不重复;第二类是使用一些数据结构和算法。F面主要就第二类介绍几个方法
7、:方法1:思想是用一个数组来保存索弓口号,先随机生成个数组位置,然后把这个位置的索引号取出来,并把最后个索引号复制到当前的数组位置,然后使随机数的上限减,具体如:先把这 100个数放在一个数组内,每次随机取个位置,将该位置的数用最后的数代替。int index = new int15; for (int i = 0; istatic int Next(rb);int value = (rb, 0);if (value/产生一个非负数且最大值在max以下的乱数/P ublic static int Next(int max) (rb);int value = (rb, 0);value = va
8、lue % (max + 1);if (value/产生一个非负数且最小值在min以上最大值在max以下的乱数/ /returnp ublic static int Next(int min, int max)int value = Next(max - min) + min;value;c# Random快速连续产生相同随机数的解决方案Random类是一个产生伪随机数字的类,它的构造函数有两种,一个是直接 NewRandom,另外一个是 NewRandom(lnt32),前者是根据触发那刻的系统时间做为种子,来产生一个随机数字,后者 可以自己设定触发的种子,一般都是用UnCheck(lnt)
9、 做为参数种子,因此如果计算机运行速度很快,如果触发 Randm函数间隔时间很短,就有可能造成产生一样的随机数,因为伪随机的数字,在Random的内部产生机制中还是有一定规律的,并非是真正意义上的完全随机。Random快速连续产生相同随机数的解决方案:1、延时的办法。可以采用for循环的办法,也可以采用(100); 2 、提高随机数不重复概率的种子生成方法Random 类 命名空间:System 表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备。伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,因为它们是用一种确定的 数学算法选择的,但是从实用
10、的角度而言,其随机程度已足 够了。伪随机数的生成是从种子值开始。如果反复使用同一个种子,就会生成相同的数字系列。产生不同序列的一种方法是使种子值与时间相关,从而对于Random的每个新实例,都会产生不同的系列。默认情况下,Random类的无参数构造函数使用系统时钟生成其种子值,而参数化构造函数可根据当前时间的计时周期数采用 Int32值。但是,因为时钟 的分辨率有限,所以,如果使用无参数构造函数连续创建不 同的Random对象,就会创建生成相同随机数序列的随机数生成器。通过创建单个而不是多个Random对象可以避免此问题。若要提高性能,请创建一个随时间推移能生成多个随机数的Random对象,而
11、不要反复新建会生成同一个随机数的Random 对象。Ran dom成员名称说明Equals 确定指定的 Object是否等于当前的Object oFinalize允许Object 在“垃圾回收”回收Object之前尝试释放资源并执行其他清理操作。GetHashCode 用作特定类型的哈希函数。GetType 获取当前实例的 Type。MemberwiseClone 创建当前 Object的浅表副本。Next 已重载。返回随机数。NextBytes 用随机数填充指定字节数组的元素。NextDouble 返回一个介于 和 之间的随机数。Sample 返回一个介于和之间的随机数。用C#生成不重复的随
12、机数中国IT实验室收集整理20XX-4-2我们可以使用两种方式初始化一个随机数发生器:第一种方法不指定随机种子,系统自动选取当前时间作为随机种子:Random ro = new Random ;第二种方法可以指定一个int型参数作为随机种子:int iSeed=10;Random ro = new Random(10); long tick =;Random ran = new Random(int)(tick & 0xffffffffL)| (int) (tick 32);这样可以保证99%不是一样。之后,我们就可以使用这个Random类的对象来产生随机数,这时候要用到 方法。这个方法使用相
13、当灵活,你甚至可以指定产生的随机数的上下限。不指定上下限的使用如下:int iResult; iResult=;F面的代码指定返回小于 100的随机数:int iResult;int iUp=100;iResult=(iU p);而下面这段代码则指定返回值必须在50-100的范围之内:int iResult; int iUp=100; int iDown=50;iResult=(iDown,iU p);除了方法之外,Random类还提供了 方法产生一个范围之间的随机的双精度浮点数:double dResult;dResult=;但是用Random类生成题号,会出现重复,特别是在数量较小的题目中
14、要生成不重复的的题目是很难的。参考了网上的一些方法,找到两类解决方法,一类是通过随机种子入手,使每一次的随机种子不同,来保证不重复;第二类是使用一些数据结构和算法。F面主要就第二类介绍几个方法:方法1:思想是用一个数组来保存索弓口号,先随机生成个数组位置,然后把这个位置的索引号取出来,并把最后个索引号复制到当前的数组位置,然后使随机数的上限减,具体如:先把这 100个数放在一个数组内,每次随机取个位置,将该位置的数用最后的数代替。int index = new int15; for (int i = 0; i/ 产生一个非负数的乱数IIIp ublicstatic int Next(rb);/int value = (rb, 0);if (value/产生一个非负数且最大值在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年摄影技巧试题题库及答案
- 2025年凉山州林业局考试试题及答案
- 旅游类专业试题及答案
- 临床专业试题模板及答案
- 公卫专业试题及答案
- 外包加工合同范本2025年版2篇
- 转数学专业试题及答案
- 2025年育婴师(初级)职业技能鉴定答辩技巧高频考点试卷及答案
- 2025年吉林口腔助理医师考试答案-吉林口腔助理医师考试答案解析
- 口腔专业三基试题及答案
- 一年级上册语文晨读课件
- 高职院校教师职业发展规划指南
- 2025重庆市专业应急救援总队应急救援人员招聘28人考试参考题库及答案解析
- 黑龙江省龙东地区2025届中考数学试卷(含解析)
- 2025-2026学年人教版(2024)小学美术二年级上册(全册)教学设计(附目录P144)
- 2025高考地理试题分类汇编:地球上的水含解析
- 2026届高考作文写作素材:《感动中国》2024年度十大人物素材及其运用
- GB/T 28121-2011非热封型茶叶滤纸
- 2023年廊坊市投资控股集团有限公司招聘笔试模拟试题及答案解析
- 苹果栽培学完整版课件
- 湿性愈合和新型敷料选择课件
评论
0/150
提交评论