当前位置:  编程技术>.net/c#/asp.net

C#生成不重复的随机数的几个代码

    来源: 互联网  发布时间:2014-08-30

    本文导语:  在c#编程中,我们可以使用两种方式初始化一个随机数发生器: 1)、不指定随机种子,系统自动选取当前时间作为随机种子: 代码如下: Random ro = new Random(); 2)、可以指定一个int型参数作为随机种子: 代码如下: int iSeed=10; ...

在c#编程中,我们可以使用两种方式初始化一个随机数发生器:
1)、不指定随机种子,系统自动选取当前时间作为随机种子:

代码如下:
Random ro = new Random();

2)、可以指定一个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 int[15];
  for (int i = 0; i < 15; i++)
    index = i;
  Random r = new Random();
  //用来保存随机生成的不重复的10个数
  int[] result = new int[10];
  int site = 15;//设置下限
  int id;
  for (int j = 0; j < 10; j++)
  {
    id = r.Next(1, site - 1);
    //在随机位置取出一个数,保存到结果数组
    result[j] = index[id];
    //最后一个数复制到当前位置
    index[id] = index[site - 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 int[10];
  int tmp=0;
  int minValue=1;
  int maxValue=10;
  for (int i=0;i

    
 
 

您可能感兴趣的文章:

  • c#如何生成Excel(.xls和.xlsx)文件
  • C# Guid.NewGuid生成随机数的例子
  • C#生成随机字符串的实例
  • C#随机生成Unicode类型字符串
  • c#生成随机数示例分享
  • C#实现在两个数字之间生成随机数的方法
  • c# 生成随机时间的小例子
  • 生成不重复随机数列表的c#代码
  • C#生成注册码的小例子
  • C#生成MD5的函数代码
  • C#实现动态生成表格的方法
  • C#生成不重复随机数列表实例
  • C#生成设置范围内的Double类型随机数的方法
  • C#生成单页静态页简单实例
  • C#生成加密的16位随机数的代码
  • 一段C#生成随机验证码的代码
  • 基于C#生成随机数示例
  • c#生成缩略图的实现方法
  • c#生成缩略图不失真的简单示例
  • asp.net(c#) 使用Rex正则来生成字符串数组的代码
  • C#随机生成不重复字符串的两个不错方法
  • linux c 生成随机数srand函数和rand函数介绍及代码示例
  • java生成字母数字组合的随机数示例 java生成随机数
  • ORACLE中DBMS_RANDOM随机数生成包
  • 很菜的问题,关于随机数的生成,高手快进!
  • 如何用java生成指定范围的随机数
  • 随机数生成器 haveged
  • c语言生成随机数的方法(获得一组不同的随机数)
  • PHP随机数生成器 paptcha
  • 生成随机数的问题。
  • 生成300个不同的随机数的SQL语句
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • QT Designer生成的代码不能生成可执行程序
  • php生成短网址 仿微博短网址生成代码
  • Java代码自动生成工具 JunJava
  • C/C++ 代码文档生成器 cldoc
  • bean 代码生成工具 BeanGenerator
  • 在JB自己生成的EJB客户端的测试代码中都会自动生成,象String url = "t3://localhost:7001";这样的,请问:
  • CPython代码生成器 Shiboken
  • glade无法生成C++代码
  • 最快速的java代码生成器 rapid-generator
  • 代码自动生成工具 Acceleo
  • iBATIS的代码生成工具 Ibator
  • Java 代码生成工具 JAnnocessor
  • PHP代码生成器 PHPGEN
  • Java 的解析器代码生成器 AustenX
  • 生成Python代码的UML插件 PyUML
  • Eclipse代码生成插件 slave4j
  • php生成唯一标识符的代码
  • C代码文档生成工具 Cxref
  • 用rose试图生成java代码,提示如下错误,求教高手!
  • 欢迎使用、加入Arrow项目开发--一个自动化代码生成工具
  • linux c下利用srand和rand函数生成随机字符串
  • 用JBuilder能将java程序生成exe可执行文件吗?如何生成?
  • Linux下c基于openssl生成MD5的函数
  • 我想问一下,java生成的.class文件能不能通过某种工具生成.exe文件?
  • linux下利用(cat,strings,head,sed)命令生成随机字符串
  • 高分求jsp中动态生成图片的相关资料、生成svg格式和pdf格式的资料,不够再加分
  • php中session_id()函数详细介绍,会话id生成过程及session id长度
  • 如何使用arm-uclibc-gcc将.c文件编译生成.a,将.c文件编译生成.cgi?
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • 如何指定用javac编译生成类的存放路径。(最好不要告诉我再生成之后再把文件流重新到出这种)
  • 需要从数据库中动态生成的页面是该在SERVLET输出生成,还是应该在JSP编码实现?




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3