有五张牌,有什么好的算法来判断它是如下:
1,什么了没有
2,有一对
3,有两对
4,有三条
5,有三带二
6,有顺子
求一个简单的算法

解决方案 »

  1.   

    Option ExplicitSub Main()
        Debug.Print CheckCards(Array(8, 9, 10, 11, 12))
        Debug.Print CheckCards(Array(2, 2, 2, 5, 5))
        Debug.Print CheckCards(Array(3, 3, 4, 5, 5))
        Debug.Print CheckCards(Array(3, 3, 4, 5, 9))
        Debug.Print CheckCards(Array(8, 9, 10, 11, 13))
    End SubFunction CheckCards(aCards As Variant) As String
        Dim aSame(0 To 1) As Byte
        Dim i As Long, j As Long, k As Long
        
        Sort aCards
        
        For i = 1 To 4
            If aCards(i) <> (aCards(0) + i) Then Exit For
        Next
        If i = 4 Then
            CheckCards = "顺子"
            Exit Function
        End If
        
        aSame(0) = 0
        aSame(1) = 0
        k = 0
        j = 0
        For i = 1 To 4
            If aCards(i) = aCards(j) Then
                aSame(k) = i - j + 1
            Else
                j = i
                If aSame(k) <> 0 Then
                    k = k + 1
                End If
            End If
        Next
        
        '请自行根据 aSame(0)、aSame(1) 判断牌型'
        CheckCards = aSame(0) & "," & aSame(1)
    End FunctionSub Sort(aCards As Variant)
        '不分花色,按牌点排序。测试用数据中已排序,请自行实现。'
    End Sub