C求在同一秒产生不同的随机数字?要求永不重复

2021-01-26 11:18:28 字数 5997 阅读 7289

1楼:匿名用户

用个静态全局list保存产生的随机数

然后请求的时候产生一个就和list里的做对比,如果存在,则放弃,重新生成,否则就返回给用户

.*** 下用c#产生一个永不重复10位随机数

2楼:叙事诗鞍悄

我们在做能自动生成试卷的考试系统时,常常需要随机生成一组不重复的题目,在.***

framework中提供了一个专门用来产生随机数的类system.random。

对于随机数,大家都知道,计算机不可能产生完全随机的数字,所谓的随机数发生器都是通过

一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这

种随机数被称作伪随机数。伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并

不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了。伪随机数的选择是从随

机种子开始的,所以为了保证每次得到的伪随机数都足够地“随机”,随机种子的选择就显得

非常重要。如果随机种子一样,那么同一个随机数发生器产生的随机数也会一样。一般地,我

们使用同系统时间有关的参数作为随机种子,这也是.*** framework中的随机数发生器默认采

用的方法。

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

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

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 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++)

方法2:利用hashtable。[nextpage]

hashtable hashtable = new hashtable();

random rm = new random();

int rmnum = 10;

for (int i = 0; hashtable.count < rmnum; i++)

}方法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<10;i++)

.........

.........

public int getnum(int arrnum,int tmp,int minvalue,int maxvalue,random ra)

n++;

}return tmp;}

3楼:当爱依成传说

使用guid的哈希码作为种子值,就不会重复了,**如下:

public class randomhelper{///

///生成制定位数的随机码(数字)

/////////

4楼:幻想武士

说的比较笼统!

永不重复10位随机数

?包括数字和字母?

5楼:匿名用户

思路:可以用随机数加时间的方法,这样绝对不会重复

如何让c#产生不重复的随机数

6楼:匿名用户

“随机数 和 不重复 是相悖的两个概念”。因此这个问题理论上无解。

随机数,(一般c#中)指的是随机生成的一个整型或者浮点型数字。

不重复,指的是在一个数组中,每个元素都有唯一性。

(我们比方说,要生成10个不重复的随机数)

如果在一个范围内生成多个随机数, 那么肯定是会有生成“重复”的几率, 如果要做到不重复,1、要么每次生成时,对范围进行重新判定,

2、要么是生成后,比对已生成的数据,如果相同就重新生成。

无论哪一种做法,都可以实现“生成一组看似随机的不重复数据”,但是这个不能叫“随机数”。

1、的做法是指定新范围,从边界规避掉重复的可能性,所以这一组10个数据其实取值范围是不同的,因为不能叫做“同一组随机数”。

2、的做法其实是会生成重复随机数的, 只是我们把它过滤掉了,因此也不是“不重复随机数”。

所以这个问题如果不去钻牛角尖,有这么两种简单做法去实现,如果严谨的去**,其实是个悖论。

7楼:暖兰菲

要不重复的话,就用guid类把

guid g = guid.newguid(); //创建一个guid的对象

console.writeline(g.tostring());//然后tostring() 你用控制台输出看看,这种随机产生的十六进制数字,会重复的几率几乎没有。

8楼:匿名用户

static double buf = 0.5;

private static double ran()while (math.abs(num - buf) < 0.000001);

buf = num;

return (num);

}//0.00001表示接近于0的实数(伊普斯龙)//主程序调用 ran()即可,例如: r=ran();

***************===分割线********************

如果程序较小:可以如下

private static double ran()

9楼:匿名用户

如果你的随机数是整数,那么不可能不重复。随机数的产生次数,超过了整数的范围,必然会出现重复。如果不考虑范围的问题,每次产生随机数后,把它记下来,用于检查下次随机数是否重复。

如果不是整数,你可以用guid来避免重复

c#生成制定范围和数量的随机数,要求不重复

10楼:**最大功能

listlist=newlist();//用来存放所要的随机数randomr=newrandom();

for(inti=0;i<5;i++)//弄5个随机数

else}

c# 如何生成不重复的1-100随机数。

11楼:匿名用户

有两种思路:1、随机生成一个1-100的数,然后判断重复,如果重复再生成一次;

2、创建一个数组,元素内容为1-100,对元素随机排序。

请参考下面的**

public void generaterandomnums()value = rand.next(1, 21);

if (!list.contains(value))}foreach (int temp in list).", temp);}}

第二种思路:

int a = ;

int b = a.orderby(x => guid.newguid()).toarray();

foreach (int v in b)

console.writeline(v);

console.readkey();

12楼:阳光的雷咩咩

randomr=newrandom();

intnums=enumerable.range(1,100)

.orderby(x=>r.next()).toarray();

foreach(intninnums)console.writeline(n);

c#有没有函数能生成不重复的随机数,比如1-10之间的不重复随机数???

13楼:匿名用户

用random类生成随机数,然后还前面生成的随机数比较,如果相同就删除。

然后继续用random生成随机数只到生成的随机数一个都不重复下面的**可以参考一下,主要是用了rand类的next方法int randomarray = new int[20];

random random=new random();

randomarray[0] = random.next(1, 10);

for (int i = 1; i < 4; i++)}} while (foundsame);}

14楼:匿名用户

有,不过得自己写!当取到一个随机值时,从数组中排除掉,再从剩余的数组中继续取,直到数组为空!

求高手,c#,如何生成15个1-15之间的不重复的随机数???

15楼:archer羽的传说

考虑到算法效率~你其实可以用另一种方式来实现~先生成一个1-15按顺序的数组

然后生成随机变量种子~

每次取一个在数组长度内的随机数

然后取出对应的数值并放到另一个数组中

而存的那十五个数值的数组则把该数值去除~这样十五次就能得到了~**如下:

//定义数组~并给出长度

listilist = new list();;

//设置初始值

for (int i = 1; i < 16; i++)random rd = new random();

//要得到15个随机数

int shownum = new int[15];

for (int i = 0; i < 15; i++)

求一句不重复的古诗词,字不可重复使用!不要捣乱

1楼 匿名用户 金山西见烟尘飞。走马川行奉送出师西征 走马川行奉送封大夫出师西征 作者 岑参 朝代 唐代 君不见走马川行雪海边,平沙莽莽黄入天。 轮台九月风夜吼,一川碎石大如斗,随风满地石乱走。 匈奴草黄马正肥,金山西见烟尘飞,汉家大将西出师。 将军金甲夜不脱,半夜军行戈相拨,风头如刀面如割。 马毛...

wps中同中同一种字体不一样,要求调成一样的

1楼 回忆夜空蚁 个人建议复制文字,在粘贴进入word中选择逗选择性粘贴地 无文本 最后一个 。希望有用 2楼 纯情女孩 复制粘贴的时候选择 只粘贴文本 即可自动适应原有格式。 3楼 匿名用户 使用格式刷 刷一下就行了。刷出来的肯定是一样的。 4楼 看山是山 先全选,在设定字体和字号,确定就成 wp...

求简单一点古韵一点的男生名字(不要复姓)

1楼 流墨,李青砚,萧劲竹,卿音,于野,刘烨 晔 ,朱擎苍 求比较古韵一点的名字 2楼 负卿千行琉璃泪 倾我一生,诺你白首。 世世为君生 香雾空朦月转廊 琉璃残泪芳华谢 3楼 匿名用户 要看什么职业才比较好搭配,幽香染轻弦,一缕冷香远。告诉我职业才好帮你起。 4楼 匿名用户 墨海 墨家辞,名曰海 古...