C如何生成不重复随机数组C如何生成一个不重复随机数组

2021-03-08 19:23:34 字数 6709 阅读 5892

1楼:乁

随机产生数组的下标,不直接产生数,我举随机产生0~9的随机数int num = new int[10];

int newnum = new int[10];

int i,r = 9;

int n;

int tmp;

random rand = new random();

for (i = 0; i < 10; i++)//初始化这个数组,0~9

///这个算法只需要循环你的数范围的次数而已for (i = 0; i < 10; i++)for (i = 0; i < 10; i++)", newnum[i]);

}console.read();

2楼:匿名用户

////// 返回随机数组

////// 最小值

/// 最大值

/// 个数

///public int getrandomunrepeatarray(int minvalue, int maxvalue, int count)

array.sort(keys, items);

int result = new int[count];

array.copy(items, result, count);

return result;

}********************====//调用实例

int arr = getrandomunrepeatarray(1, 10, 10);

for (int i=0; i < arr.length; i++)

3楼:匿名用户

for(int i = 0

matlab中怎样生成一个区间内不重复的随机数?

4楼:草是一颗植物

即产生随机排列:

p = randperm(n) returns

a random permutation of the integers 1:n.

所以要产生[16 31]的随机排列,可以执行:

randperm(31-16+1)+15

随机数是专门的随机试验的结果。在统计学的不同技术中需要使用随机数,比如在从统计总体中抽取有代表性的样本的时候,或者在将实验动物分配到不同的试验组的过程中,或者在进行蒙特卡罗模拟法计算的时候等等。

在统计学的不同技术中需要使用随机数,比如在从统计总体中抽取有代表性的样本的时候,或者在将实验动物分配到不同的试验组的过程中,或者在进行蒙特卡罗模拟法计算的时候等等。

产生随机数有多种不同的方法。这些方法被称为随机数发生器。随机数最重要的特性是:它所产生的后面的那个数与前面的那个数毫无关系。

真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。这样的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高。

在实际应用中往往使用伪随机数就足够了。这些数列是“似乎”随机的数,实际上它们是通过一个固定的、可以重复的计算方法产生的。计算机或计算器产生的随机数有很长的周期性。

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

5楼:匿名用户

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

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

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

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

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

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

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

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

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

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

6楼:暖兰菲

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

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

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

7楼:匿名用户

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

8楼:匿名用户

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

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

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

9楼: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++)

10楼:匿名用户

先定义1-15的集合,然后随机从该集合中拿出一个来放到一个数组中,最后再把这个数组遍历下

listlist=new list();

for(int i=1;i<=15;i++)list.add(i);

int arr=new int[15];

random rand=new random();

for(i=15;i>1;i--)

意思知道下,手写**可能有错。还有错误自己在改下。

11楼:岩石の审判

把已经生成的随机数存入一个数组,然后再次生成随机数时,与数组的元素比较,若相等,重新生成,若不相等,直接存入数组。

12楼:目前登陆帐号

1、用随机数生成函数生成随机数

2、然后用生成的数字除与15,取余

3、循环上面2步骤,一直到生成15个。

13楼:小妻丐

random r=new random();

int num=r.next(1,15);

14楼:施奥陶水蓉

intxl

=new

int();

inttmp=0;

string

output

="the

numbers

are:

";randomrd=

newrandom();

//把1-33放在数组里

for(inti=

0;i<

33;i++)

//循环6次

for(inti=

0;i<

6;i++)

return

output;

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

15楼:叙事诗鞍悄

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

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;}

c如何把数字随机分成多个数字,c# 如何把一个数字随机分成多个数字

1楼 匿名用户 1 在1000以内取9个随机数 2 把9个数从小到大排序 3 用第一个数减去0,第二个数减去第一个数,第三个数减去第二个数。。。一直到用1000减去第9个数 4 第3步中,每次相减得的差就是分得的一份。 2楼 匿名用户 生成随机数就得了。 random r new random a1...

C如何从列表里取随机数,C#如何从一个列表里取一个随机数?

1楼 匿名用户 输入 列表 输出 随机元素 public t getrandomitem ilistlist sh 2楼 匿名用户 random对象就是生成随机数的 在c 中,怎么产生一个随机数? 3楼 匿名用户 frameword中提供了一个专门产生随机数的类system random,此类默认情...

C语言如何删除数组中的重复元素,C语言删除一个整型数组里面重复的元素

1楼 include stdafx h vc 6 0加上这一行 include stdio h void main void ln for ln sizeof a sizeof int k i 1 i k a k a i for i 0 i printf n c语言删除一个整型数组里面重复的元素 2...