我想编一个产生5个在1-20中不重复的随机数的算法,请问该如何实现啊??
注意,是不能重复的。如果在五个中产生5个随机数的话,就必须是5个都出来。。
请帮忙解答~谢谢

解决方案 »

  1.   

    Dim int1 As Integer
        Randomize                      '    Randomize语句,初始化随机数生成器。
        For int1 = 1 To 20
            str1 = Cstr(Rnd * 26)   
        Next
        Text1.Text = str1
      

  2.   

    Private Sub Command1_Click()
        Dim Arr(5) As Integer
        Dim I As Integer
        Dim j As Integer
        Dim temp As Integer
        Dim answer As Boolean
        Text1.Text = Empty
        Randomize
        I = 1
        Arr(0) = Int(21 * Rnd)
        Do While I < 5
            answer = False
            temp = Int(21 * Rnd)
            For j = 0 To I - 1
                If temp = Arr(j) Then answer = True
            Next j
            If answer = False Then
                Arr(I) = temp
                I = I + 1
            End If
        Loop
        For I = 0 To 4
            Text1.Text = Text1.Text & Arr(I) & ","
        Next IEnd Sub
      

  3.   

    Dim numtxt As String
    Dim i As Integer
    Dim o As Integer
    Dim txt(1 To 5) As Integer
    Dim num As Integer
    Dim oo As Integer
    oo = 20numtxt = "0102030405060708091011121314151617181920"
    For i = 1 To 5
        o = Int(oo * Rnd) + 1
        txt(i) = Val(Mid(numtxt, (o * 2 - 1), 2))
        MsgBox txt(i)
        numtxt = Left(numtxt, (o - 1) * 2) & Right(numtxt, (oo - o) * 2)
        oo = oo - 1
    Next i
      

  4.   

    '小仙妹的跳虱算法:
    Private Sub Command1_Click()
    Randomize
    Dim a(1 To 20) As Integer
    Dim temp As Integer
    Dim num As Integer
    For i = 1 To 20
    a(i) = i
    Next
    For j = 1 To 5
    temp = a(j)
    num = Int(20 * Rnd + 1)
    a(j) = a(num)
    a(num) = temp
    Next
    For k = 1 To 5
    Debug.Print a(k)
    Next
    End Sub
      

  5.   

    dim a(1 to 5) as integer
    randomize timer
    for i=1 to 5
    for_go1:
    a(i)=rnd*20+1
    for f=1 to 5
    if a(i)=a(f) then goto For_go1
    next
    next
      

  6.   

    '这个没问题:
    Dim a(1 To 5) As Integer, i%, f%
    Randomize Timer
    For i = 1 To 5
    loop1:
    a(i) = Int(5 * Rnd + 1)
    For f = 1 To i - 1
    If a(i) = a(f) Then GoTo loop1
    Next
    Next
    MsgBox a(1) & "," & a(2) & "," & a(3) & "," & a(4) & "," & a(5)
      

  7.   

    '写错了,应该是这个没问题:
    Dim a(1 To 5) As Integer, i%, f%
    Randomize Timer
    For i = 1 To 5
    loop1:
    a(i) = Int(20 * Rnd + 1)
    For f = 1 To i - 1
    If a(i) = a(f) Then GoTo loop1
    Next
    Next
    MsgBox a(1) & "," & a(2) & "," & a(3) & "," & a(4) & "," & a(5)
      

  8.   

    或:
    Private Declare Function SendMessageFind Lib "USER32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As String) As Long
    Const LB_ERR = (-1)
    Const LB_FINDSTRING = &H18FPrivate Sub Command1_Click()
    Dim ret, a%List1.Clear '窗体上加一个list1
    Randomize Timer
    Do
        a = Int(20 * Rnd + 1)
        ret = SendMessageFind(List1.hWnd, LB_FINDSTRING, 0, a)
        If ret = LB_ERR Then List1.AddItem a
    Loop While List1.ListCount <> 5
    End Sub