知识大全 用C#生成不重复的随机数

Posted 种子

篇首语:一箫一剑平生意,负尽狂名十五年。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用C#生成不重复的随机数相关的知识,希望对你有一定的参考价值。

用C#生成不重复的随机数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  我们在做能自动生成试卷的考试系统时 常常需要随机生成一组不重复的题目 在 net Framework中提供了一个专门用来产生随机数的类System Random

  对于随机数 大家都知道 计算机不可能产生完全随机的数字 所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算 用产生的结果来近似的模拟完全随机数 这种随机数被称作伪随机数 伪随机数是以相同的概率从一组有限的数字中选取的 所选数字并不具有完全的随机性 但是从实用的角度而言 其随机程度已足够了 伪随机数的选择是从随机种子开始的 所以为了保证每次得到的伪随机数都足够地 随机 随机种子的选择就显得非常重要 如果随机种子一样 那么同一个随机数发生器产生的随机数也会一样 一般地 我们使用同系统时间有关的参数作为随机种子 这也是 net Framework中的随机数发生器默认采用的方法

  我们可以使用两种方式初始化一个随机数发生器

  第一种方法不指定随机种子 系统自动选取当前时间作为随机种子

  Random ro = new Random();

  第二种方法可以指定一个int型参数作为随机种子

  int iSeed= ;  Random ro = new Random( );  long tick = DateTime Now Ticks;  Random ran = new Random((int)(tick & xffffffffL) | (int) (tick >> ));

  这样可以保证 %不是一样

  之后 我们就可以使用这个Random类的对象来产生随机数 这时候要用到Random Next()方法 这个方法使用相当灵活 你甚至可以指定产生的随机数的上下限

  不指定上下限的使用如下

  int iResult;  iResult=ro Next();

  下面的代码指定返回小于 的随机数

  int iResult;  int iUp= ;  iResult=ro Next(iUp);

  而下面这段代码则指定返回值必须在 的范围之内

  int iResult;  int iUp= ;  int iDown= ;  iResult=ro Next(iDown iUp);

  除了Random Next()方法之外 Random类还提供了Random NextDouble()方法产生一个范围在 之间的随机的双精度浮点数

  double dResult;  dResult=ro NextDouble();

  但是用Random类生成题号 会出现重复 特别是在数量较小的题目中要生成不重复的的题目是很难的 参考了网上的一些方法 包括两类 一类是通过随机种子入手 使每一次的随机种子不同 来保证不重复;第二类是使用一些数据结构和算法 下面主要就第二类介绍几个方法

  方法 思想是用一个数组来保存索引号 先随机生成一个数组位置 然后把这个位置的索引号取出来 并把最后一个索引号复制到当前的数组位置 然后使随机数的上限减一 具体如 先把这 个数放在一个数组内 每次随机取一个位置(第一次是 第二次是 ) 将该位置的数用最后的数代替

  int[] index = new int[ ];  for (int i = ; i < ; i++)  index = i;  Random r = new Random();  //用来保存随机生成的不重复的 个数  int[] result = new int[ ];  int site = ;//设置下限  int id;  for (int j = ; j < ; j++)     id = r Next( site );   //在随机位置取出一个数 保存到结果数组   result[j] = index[id];   //最后一个数复制到当前位置   index[id] = index[site ];   //位置的下限减少一   site ;    方法 利用Hashtable [NextPage]  Hashtable hashtable = new Hashtable();  Random rm = new Random();  int RmNum = ;  for (int i = ; hashtable Count < RmNum; i++)     int nValue = rm Next( );   if (!hashtable ContainsValue(nValue) && nValue != )       hashtable Add(nValue nValue);    Console WriteLine(nValue ToString());     

  方法 递归 用它来检测生成的随机数是否有重复 如果取出来的数字和已取得的数字有重复就重新随机获取

cha138/Article/program/net/201311/15682

相关参考

知识大全 生成8位随机不重复的数字编号

  生成位随机不重复的数字编号  packagemonutil;  importjavautilArrays;  importjavautilRandom;  /**  *  */  publiccl

知识大全 JS随机生成不重复数据的实例方法

JS随机生成不重复数据的实例方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  昨天晚上在IBM

知识大全 浅谈C#随机数发生器

浅谈C#随机数发生器  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们在做能自动生成试卷的考试

知识大全 基数估计算法

  一个简单直观的基数估计方法  让我们从一个简单直观的例子开始吧假设你通过如下步骤生成了一个数据集  随机生成n个服从均匀分布的数字  随便重复其中一些数字重复的数字和重复次数都不确定  打乱这些数

知识大全 获取不重复随机数

  staticvoidMain(string[]args)    int[]myNum=newint[];  myNum=GetRand();  ArraySort(myNum);  foreach

知识大全 用Visual C#动态生成组件

用VisualC#动态生成组件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  通常在写程序的时候

知识大全 oracle数据库生成随机数的函数

  在Oracle中的DBMS_RANDOM程序包中封装了一些生成随机数和随机字符串的函数其中常用的有以下两个  DBMS_RANDOMVALUE函数  该函数用来产生一个随机数有两种用法  产生一个

知识大全 生成随机数与字母

   一题目如下            Write

知识大全 php生成随机密码的几种方法

  使用PHP开发应用程序尤其是网站程序常常需要生成随机密码如用户注册生成随机密码用户重置密码也需要生成一个随机的密码随机密码也就是一串固定长度的字符串这里我收集整理了几种生成随机字符串的方法以供大家

知识大全 asp 一个简单生成随机数程序

cha138/Article/program/net/201311/14261