简单问题 ~~请教大虾!

hnzhc 2004-09-01 09:27:54
如何使随机选出来的5个数 不能重复 并 按大小排列?事情改决 马上结贴!
...全文
56 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
51365133 2004-09-01
不好意思,刚才写错了
这个是对的,我用的是50个数测的,你吧50改成4就可以了
Dim a(50), b(100)
Private Sub Command1_Click()
List1.Clear
For i = 1 To 100
b(i) = i
Next i
For i = 0 To 50
j = Int(Rnd * 99) + 1
If b(j) <> 0 Then
a(i) = b(j)
b(j) = 0
Else
i = i - 1
End If
Next i
For i = 0 To 50
For j = i To 50
If a(i) < a(j) Then
m = a(i): a(i) = a(j): a(j) = m
End If
Next j
Next i
For i = 0 To 50
List1.AddItem a(i)
Next i
End Sub
回复
51365133 2004-09-01
Dim a(4)
Private Sub Command1_Click()
List1.Clear
Rnd Timer
For i = 0 To 4
a(i) = Int(Rnd * 99) + 1
Next i
For i = 0 To 4
For j = i To 4
If a(i) < a(j) Then
m = a(i): a(i) = a(j): a(j) = m
End If
Next j
Next i
For i = 0 To 4
List1.AddItem a(i)
Next i
End Sub
测试过了
回复
starsoulxp 2004-09-01
上面写的是从大到小排序的。如果要从小到大的话,把那个a(i) < a(j)改成a(i) >a (j)就好了
回复
starsoulxp 2004-09-01
Option Explicit
Dim i As Integer
Dim j As Integer
Dim a(1 To 5) As Integer

Private Sub RndSelect()

Randomize
For i = 1 To 5
rLoop: a(i) = Rnd * 9 + 1
If i > 1 Then
For j = 1 To i - 1
If a(i) = a(j) Then
GoTo rLoop
End If
Next j
End If
Next i
End Sub

Private Sub Command1_Click()
Dim s As String
Call RndSelect
For i = 1 To 5
s = s & a(i) & IIf(i = 5, "", ",")
Next
Text1.Text = "选出的5个随机数为" & s

Call DescendSort
s = ""
For i = 1 To 5
s = s & a(i) & IIf(i = 5, "", ",")
Next i

Text1.Text = Text1.Text & vbCrLf & "从大到小排序:" & s

End Sub
Private Sub DescendSort()
Dim temp As Integer
i = 1
j = 1
While (i < 6)
j = i + 1
While (j < 6)
If a(i) < a(j) Then
temp = a(i)
a(i) = a(j)
a(j) = temp
End If
j = j + 1
Wend
i = i + 1
Wend



End Sub

回复
jordi2014 2004-09-01
Randomize 语句


初始化随机数生成器。

语法

Randomize [number]

可选的 number 参数是 Variant 或任何有效的数值表达式。

说明

Randomize 用 number 将 Rnd 函数的随机数生成器初始化,该随机数生成器给 number 一个新的种子值。如果省略 number,则用系统计时器返回的值作为新的种子值。

如果没有使用 Randomize,则(无参数的)Rnd 函数使用第一次调用 Rnd 函数的种子值。

注意 若想得到重复的随机数序列,在使用具有数值参数的 Randomize 之前直接调用具有负参数值的 Rnd。使用具有同样 number 值的 Randomize 是不会得到重复的随机数序列的。



Rnd 函数


返回一个包含随机数值的 Single。

语法

Rnd[(number)]

可选的 number 参数是 Single 或任何有效的数值表达式。

返回值

如果 number 的值是 Rnd 生成
小于 0 每次都使用 number 作为随机数种子得到的相同结果。
大于 0 序列中的下一个随机数。
等于 0 最近生成的数。
省略 序列中的下一个随机数。


说明

Rnd 函数返回小于 1 但大于或等于 0 的值。

number 的值决定了 Rnd 生成随机数的方式。

对最初给定的种子都会生成相同的数列,因为每一次调用 Rnd 函数都用数列中的前一个数作为下一个数的种子。

在调用 Rnd 之前,先使用无参数的 Randomize 语句初始化随机数生成器,该生成器具有根据系统计时器得到的种子。

为了生成某个范围内的随机整数,可使用以下公式:

Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

这里,upperbound 是随机数范围的上限,而 lowerbound 则是随机数范围的下限。

注意 若想得到重复的随机数序列,在使用具有数值参数的 Randomize 之前直接调用具有负参数值的 Rnd。使用具有同样 number 值的 Randomize 是不会得到重复的随机数序列的。
回复
jordi2014 2004-09-01
用Randomize语句和rnd()函数来完成


回复
发帖
VB基础类
创建于2007-09-28

7476

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2004-09-01 09:27
社区公告
暂无公告