'生成52个1到100的不重复随机数
Dim i, j As Long
Dim ran(1 To 52) As Long
Dim tNum As Long
Dim isExist As Boolean
Randomize
For i = 1 To 52
isExist = False
tNum = Int(100 * Rnd + 1)
Debug.Print tNum
For j = 1 To i
If ran(j) = tNum Then
isExist = True
i = i - 1
Exit For
End If
Next
If isExist = False Then
ran(i) = tNum
End IfNextFor i = 1 To 52
msg = msg & ran(i) & Space(1)
Next
MsgBox msg
Dim i, j As Long
Dim ran(1 To 52) As Long
Dim tNum As Long
Dim isExist As Boolean
Randomize
For i = 1 To 52
isExist = False
tNum = Int(100 * Rnd + 1)
Debug.Print tNum
For j = 1 To i
If ran(j) = tNum Then
isExist = True
i = i - 1
Exit For
End If
Next
If isExist = False Then
ran(i) = tNum
End IfNextFor i = 1 To 52
msg = msg & ran(i) & Space(1)
Next
MsgBox msg
解决方案 »
- vb读取txt文件?
- 请问如何控制打印机呢,当打印10张时,是否调用循环来处理呢
- 请问各位从哪里能找到VB高手?或是WINDOWS编程高手?或API高手?
- 一个错误,非常奇怪,求解
- ListView 中怎样让 最后的几个 Item 总是显示在顶端??
- 从access里面调出来的时间日期怎么才能按照小时分钟的格式正确显示呢?
- TDBGrid 不是一个已加载的控件类
- 如何隐藏鼠标
- F4 遭遇空难,4 人幸免于难。
- 怎样做出活页夹形状的页面,网上是否有这样的VB的插件
- !!!!!!!!!!!!!!!!岂有此理!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 如何做任意字段的报表
dim n as long,s as long,a as long,b as long
for n=0 to 51
y(51)=n+1
nextfor n=1 to 80
a=int(rnd*51):b=int(rnd*51)
s=y(a):y(a)=y(b):y(b)=s
nextend sub
这个算法速度快得多
小改一下。:)private y(51) as longsub gen()
dim n as long,s as long,a as long,b as long
for n=0 to 51
'y(51)=n+1 <==这里
y(n)=n+1
nextfor n=1 to 80
a=int(rnd*51):b=int(rnd*51)
s=y(a):y(a)=y(b):y(b)=s
nextend sub
a=int(rnd*51):b=int(rnd*51)
s=y(a):y(a)=y(b):y(b)=s
next
考虑改为
for n=0 to 50
a=int(rnd*51):s=y(n):y(n)=y(a):y(a)=s
next
这样会好一点?讨论讨论
向Nik学习,精益求精。
Dim x As New Collection, a(0 To 51) As String
For i = 0 To 99
x.Add i
Next
For i = 0 To 51
Randomize
num = Int(Rnd * x.Count + 1)
a(i) = Str(x.Item(num))
x.Remove num
Next
MsgBox Join(a(), ","), 64, "52 random number between 0 and 99"
End Sub