免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c# Random快速连续产生相同随机数的解决方案 Random类是一个产生伪随机数字的类,它的构造函数有两种,一个是直接New Random(),另外一个是New Random(Int32),前者是根据触发那刻的系统时间做为种子,来产生一个随机数字,后者可以自己设定触发的种子,一般都是用UnCheck(Int)DateTime.Now.Ticks)做为参数种子,因此如果计算机运行速度很快,如果触发Randm函数间隔时间很短,就有可能造成产生一样的随机数,因为伪随机的数字,在Random的内部产生机制中还是有一定规律的,并非是真正意义上的完全随机。Random快速连续产生相同随机数的解决方案: 1、延时的办法。 可以采用for循环的办法,也可以采用Thread.Sleep(100); 2、提高随机数不重复概率的种子生成方法: Random 类命名空间:System表示伪随机数生成器,一种能够产生满足某些随机性统计要求的数字序列的设备。伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,因为它们是用一种确定的数学算法选择的,但是从实用的角度而言,其随机程度已足够了。伪随机数的生成是从种子值开始。如果反复使用同一个种子,就会生成相同的数字系列。产生不同序列的一种方法是使种子值与时间相关,从而对于 Random 的每个新实例,都会产生不同的系列。默认情况下,Random 类的无参数构造函数使用系统时钟生成其种子值,而参数化构造函数可根据当前时间的计时周期数采用 Int32 值。但是,因为时钟的分辨率有限,所以,如果使用无参数构造函数连续创建不同的 Random 对象,就会创建生成相同随机数序列的随机数生成器。通过创建单个而不是多个 Random 对象可以避免此问题。若要提高性能,请创建一个随时间推移能生成多个随机数的 Random 对象,而不要反复新建会生成同一个随机数的 Random 对象。Random 成员名称说明Equals确定指定的 Object 是否等于当前的 Object。(继承自 Object。)Finalize允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。(继承自 Object。)GetHashCode用作特定类型的哈希函数。(继承自 Object。)GetType获取当前实例的 Type。(继承自 Object。)MemberwiseClone创建当前 Object 的浅表副本。(继承自 Object。)Next已重载。 返回随机数。NextBytes用随机数填充指定字节数组的元素。NextDouble返回一个介于 0.0 和 1.0 之间的随机数。Sample返回一个介于 0.0 和 1.0 之间的随机数。ToString返回表示当前 Object 的 String。(继承自 Object。)用 C# 生成不重复的随机数来源:中国IT实验室收集整理 2008-4-2我们可以使用两种方式初始化一个随机数发生器:第一种方法不指定随机种子,系统自动选取当前时间作为随机种子: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;dResult=ro.NextDouble();但是用Random类生成题号,会出现重复,特别是在数量较小的题目中要生成不重复的的题目是很难的。参考了网上的一些方法,找到两类解决方法,一类是通过随机种子入手,使每一次的随机种子不同,来保证不重复;第二类是使用一些数据结构和算法。下面主要就第二类介绍几个方法:方法1:思想是用一个数组来保存索引号,先随机生成一个数组位置,然后把这个位置的索引号取出来,并把最后一个索引号复制到当前的数组位置,然后使随机数的上限减一,具体如:先把这100个数放在一个数组内,每次随机取一个位置(第一次是1-100,第二次是1-99,.),将该位置的数用最后的数代替。int index = new int15;for (int i = 0; i 15; i+)index = i;Random r = new Random();/用来保存随机生成的不重复的10个数int result = new int10;int site = 15;/设置下限int id;for (int j = 0; j 10; j+)id = r.Next(1, site - 1);/在随机位置取出一个数,保存到结果数组resultj = indexid;/最后一个数复制到当前位置indexid = indexsite - 1;/位置的下限减少一site-;方法2:利用Hashtable。Hashtable hashtable = new Hashtable();Random rm = new Random();int RmNum = 10;for (int i = 0; hashtable.Count RmNum; i+) int nValue = rm.Next(100); if (!hashtable.ContainsValue(nValue) & nValue != 0) hashtable.Add(nValue, nValue); Console.WriteLine(nValue.ToString(); 方法3:递归,用它来检测生成的随机数是否有重复,如果取出来的数字和已取得的数字有重复就重新随机获取。Random ra=new Random(unchecked(int)DateTime.Now.Ticks);int arrNum=new int10;int tmp=0;int minValue=1;int maxValue=10;for (int i=0;i10;i+)tmp=ra.Next(minValue,maxValue); /随机取数arrNum=getNum(arrNum,tmp,minValue,maxValue,ra); /取出值赋到数组中.public int getNum(int arrNum,int tmp,int minValue,int maxValue,Random ra)int n=0;while (n=arrNum.Length-1)if (arrNumn=tmp) /利用循环判断是否有重复tmp=ra.Next(minValue,maxValue); /重新随机获取。getNum(arrNum,tmp,minValue,maxValue,ra);/递归:如果取出来的数字和已取得的数字有重复就重新随机获取。n+;return tmp;silverlight 2 Random 随机数解决方案来源:我和未来有约会2008-06-17 01:21 by nasausing System;using System.Security.Cryptography; public class RNG private static RNGCryptoServiceProvider rngp = new RNGCryptoServiceProvider(); private static byte rb = new byte4; / / 产生一个非负数的乱数 / public static int Next() rngp.GetBytes(rb); int value = BitConverter.ToInt32(rb, 0); if (value 0) value = -value; return value; / / 产生一个非负数且最大值在 max 以下的乱数 / / 最大值 public static int Next(int max) rngp.GetBytes(rb); int value = BitConverter.ToInt32(rb, 0); value = valu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大理石台板安装工程施工方案
- 新生儿科血液透析用水异常安全生产应急预案演练脚本
- 2025年T电梯修理模拟考试题及答案
- 2026年河北省医疗三严三基理论考试试题及答案
- 操作台安装施工方案及技术措施
- 建筑与房地产经济高级经济实务经济师考试试卷与参考答案(2026年)
- 制冷与空调设备运行作业证考试练习题含答案
- 新生儿科ECMO故障事故应急演练脚本
- 2026陕西延安市黄龙县大学生到政府机关见习活动招募40人模拟试卷及完整答案详解(历年真题)
- 2026吉林大学白求恩第一医院呼吸与危重症医学科技术员招聘2人笔试题库带答案详解(轻巧夺冠)
- 2026年四川省成都市天府新区数学八上期末学业质量监测模拟试题含解析
- 2026年中国邮政集团有限公司吉林省分公司纪检干部社会招聘1人笔试历年典型考点题库附带答案详解
- 2026-2030中国高压电力变压器行业市场发展趋势与前景展望战略分析研究报告
- 2026交银金融科技有限公司人才招聘备考题库及一套完整答案详解
- 2026年高考全国1卷语文高考真题含答案
- 2026干细胞治疗行业市场深度调研及发展趋势和前景预测研究报告
- 2026国货航股份货站事业部招聘15人(直接聘用制)笔试参考题库及答案解析
- 《胰十二指肠切除术》课件
- 2023海淀区通用技术复习稿
- guava easycyte系列操作手册
- 2023年我国及部分省市畜牧业相关政策 深入推进草原畜牧业转型升级
评论
0/150
提交评论