现在有从1到50个数,要随机排列,并且上下相邻的数不能连续。请教给位怎样做才能达到目的?有几种算法?

解决方案 »

  1.   

    Dim a(1 To 50) As Long
    Dim i As Long, t As Long, p As Long
    Dim b As BooleanRandomizeFor i = 1 To 50
        a(i) = i
    Next '初始化For i = 1 To 50
        t = Int(Rnd * 50) + 1
        p = a(t)
        a(t) = a(i)
        a(i) = p
    Next '打乱顺序b = False
    Do While b = False
        b = True
        For i = 1 To 49
            If Abs(a(i) - a(i + 1)) = 1 Then
                t = Int(Rnd * 50) + 1
                p = a(t)
                a(t) = a(i)
                a(i) = p
                b = False
            End If
        Next
    Loop '调整For i = 1 To 50
        Print a(i)
    Next