怎么解决?

解决方案 »

  1.   

    1.用rnd产生随机数,每产生一个都检查是否重复
    2.将产生的随机数排序
      

  2.   

    下面是我出错的程序 我想只要后一个数比前个大就可以了 不知是哪里错了Randomize
    Dim ran(10) As Integer, i, j, tNum As Integer, isExist As Boolean
       For i = 1 To 10
          isExist = False
          tNum = Int(Rnd() * 100 + 301)
            For j = 1 To i
            If ran(j) <= ran(j + 1) Then
               isExist = True
               i = i - 1
               Exit For
            ElseIf i < 10 And ran(j) = 400 Then
               isExist = True
               i = i - 1
               Exit For
            End If
        Next
        If isExist = False Then
           ran(i) = tNum
        End If
    NextFor i = 1 To 10
       Print ran(i)
    Next
      

  3.   

    一般这样用
    randomize timer"后一个数比前个大"显然是行不通的,
    Int(Rnd() * 100 + 301)的范围是 301-400,如果第一个数就是400,那么后面的还怎么选,
    所以不能用"后一个数比前个大"
      

  4.   

    你这样的话,并不好,根本不知道要从来多少遍再给一法,从n个数中随机取m个不一样的数
    随机取一数,然后剩下n-1个数,取m-1个不一样的数
    再取一数,剩下n-2个,取m-2个不一样的数,
    ...
    再取一数,剩下n-k个,取m-k个不一样的数,
    ...
    再取一数,剩下n-m+1个,取1个不一样的数,
    于是完成,明否?下面是实现这一算法的函数Public Sub RandomMine(nAll&, nSel&, nSelArr() As Boolean)
    Dim i&, j&
    Dim tval&, added&, nSel2&, invert As Boolean
    Randomize TimernSel2 = nAll - nSel
    If nSel <= nSel2 Then
        invert = False
        nSel2 = nSel
    Else
        invert = True
    End IfFor i = 0 To nAll - 1
        nSelArr(i) = False
    Next iFor i = 0 To nSel2 - 1
        tval = Int(Rnd * (nAll - i))
        added = 0
        If tval < (nAll - i) / 2 Then
            For j = 0 To nAll - 1
                If nSelArr(j) Then
                    added = added + 1
                End If
                If j - added = tval Then
                    nSelArr(j) = True
                    Exit For
                End If
            Next j
        Else
            For j = nAll - 1 To 0 Step -1
                If nSelArr(j) Then
                    added = added + 1
                End If
                If nAll - 1 - j - added = nAll - i - tval Then
                    nSelArr(j) = True
                    Exit For
                End If
            Next j
        End If
    Next iIf invert Then
        For i = 0 To nAll - 1
            nSelArr(i) = Not nSelArr(i)
        Next i
    End IfEnd Sub
    用法,
    Dim tSelArr(0 To n) as boolean
    Call RandomMine(n, m, tSelArr)函数结束后,tSelArr中被设为True的元素就是被选到的数了