不重复随机数生成器
2023-01-17阅读(627)
问:如何产生不重复随机数
- 答:首先需要使用:Randomize[number] 语句,初始化随机数生成器。如果忽略了数值参数number,Randomize自动使用Timer函数的返回值作为新的随机数种子值。然后需要使用Rnd[(number)]函数,生成小于 1 但大于或等于 0 的随机值。为了生成某个范围内的随机整数,可使用以下公式:Int((upperbound - lowerbound + 1) * Rnd + lowerbound)这里,upperbound 是随机数范围的上限,而 lowerbound 则是随机数范围的下限。例子:Dim MyValueRandomize ' 对随机数生成器做初始化。MyValue = Int((6 * Rnd) + 1) '生成 1 到 6 之间的随机数值。注意:Rnd函数中的参数number决定了生成随机数的方式。若想得到重复的随机数序列,可以不使用Randomize语句,使用负参数值的Rnd函数即。若想得到不重复的随机数序列,必须使用Randomize语句,而且Rnd函数的参数可以大于0或等于0或者省略,或者与Randomize语句中的number相同。实际上,你的程序已经是产生非重复的随机数序列了,只不过下面的代码有点问题:If blnseeded = False ThenRandomizeblnseeded = TrueEnd Ifblnseeded是个未声明的Variant的局部变量,程序每次调用这个函数时,始终满足等于false的条件,所以Randomize始终得到执行,加之你使用了无参的Rnd函数,所以产生的已经是随机数序列了。
问:VBA生成不重复的随机数
- 答:随机函数rand(),既然说是随机了,就比较难以受人控制。如果硬要,要么是手动筛选,要么就是使用vba来实现自动筛选了。不过一般来说,如果随机数取的不多的情况下,是不大可能出现重复的。
- 答:产生20个1-100之间的不重复随机数
Public
Sub
RndNumberNoRepeat1()
Dim
RndNumber,
temp(20),
i,
k,
Maxrec
As
Integer
Randomize
(Timer)
'初始化随机数生成器
Maxrec
=
100
'
从A21开始输出随机数
k
=
Do
While
k
<
20
RndNumber
=
Int(Maxrec
*
Rnd)
+
1
temp(k)
=
RndNumber
Cells(k
+
21,
1)
=
RndNumber
For
i
=
To
k
-
1
If
temp(i)
=
RndNumber
Then
Exit
For
Next
i
If
i
=
k
Then
k
=
i
+
1
'MsgBox
"随机数:"
&
RndNumber
Loop
End
Sub
问:求高手做一个简单的flash的随机数的生成器,号码区间可以自己定义,一次抽取一个,不重复出现,
- 答:先说下思路 = =
首先定义一随机函数。。就是那种能输出最大值最小值之间的。。我肯定LZ会写 暂且叫他FUNC
然后定义一关闭数组 叫他CLSARR
每当出现一个新的随机数是。就把他放在CLSARR里面。。生成新的随机数时。让新的随机数和CLSARR里面的所有元素一一比较。。如果都不相同。就输出这个数。并把这个数也写在CLSARR中。。就能实现无重复生成随机数