今彩 539 6取5包牌-比對中獎號碼

商科競賽題目:今彩 539 是一種樂透型遊戲,投注者必須從 01~39 的號碼中任選 5 個不同的號碼進行投注。 開獎時,開獎單位將隨機開出五個號碼,這一組號碼就是該期今彩 539 的中獎號碼,也稱為 「獎號」。投注者的五個選號中,如有二個以上(含二個號碼)對中當期開出之五個中獎號碼, 即為中獎。

為了方便包牌,投注者可任選 6 個不同號碼,共可以產生 6 組不同的 5 個號碼組合。用程式 計算投注者任選的 6 個不同號碼的包牌的組合,各對中 2 碼(對中當期獎號之其中任二碼)、3 碼、4 碼及 5 碼的次數。

輸入說明: 第一列的數字n代表有幾組資料要測試, 。第二列為該期今彩539的中獎號碼(獎號), 已由小到大排序好。第三列起為測試資料,每組測試資料為一列,有 6 個數字,是投注者任 選的 6 個不同號碼,各個號碼間以“,”隔開,已由小到大排序好。

輸出說明: 計算每組測試資料中,獎號和投注者的 6 個號碼,用程式計算投注者任選的 6 個不同號碼所 組合的 6 種不同投注,對中 2 碼(對中當期獎號之其中任二碼) 、3 碼、4 碼及 5 碼各中幾次, 各個對中次數間以“,”隔開,且輸出順序依規定。

例如今彩 539 的中獎號碼為 01,07,28,29,30:投注者任選的 6 個不同號碼為 01,07,29,30,36,39 6 種不同投注為:(底線是為了方便比對中獎號碼) 07,29,30,36,39 對中 3 碼 01,29,30,36,39 對中 3 碼 01,07,30,36,39 對中 3 碼 01,07,29,36,39 對中 3 碼 01,07,29,30,39 對中 4 碼 01,07,29,30,36 對中 4 碼 在這 6 個不同號碼對中 2 碼 0 次;3 碼 4 次;4 碼 2 次;5 碼 0 次;則輸出 0,4,2,0。

輸入檔案 1:【檔名:in1.txt】 2    01,07,28,29,30     01,07,29,30,36,39      01,07,22,23,24,38

輸入檔案 2:【檔名:in2.txt】 2    21,22,23,24,32     01,02,03,04,05,06      21,22,23,24,25,32

輸出範例:【檔名:out.txt】 0,4,2,0     4,0,0,0    0,0,0,0     0,0,5,1

程式解說:
Dim m, n
    Dim ans  '以上為全域變數


Dim target = "01,07,28,29,30"  '中獎號碼     ' "21,22,23,24,32"
        Dim chnumb = "01,07,22,23,24,38" '6取5的6個號碼    '"01,07,29,30,36,39" ' "01,02,03,04,05,06"
     
        ' Dim tarray = Split(target, ",")'  中獎號碼切割放入陣列中
        Dim charray = Split(chnumb, ",")'6取5的6個號碼放入陣列中
        Dim numb(5) As Integer

        m = 6
        n = 5
        com(1, 1, "")

 Sub com(ByVal i, ByVal layers, ByVal s)'遞迴6取5函數
        If layers <= n Then '未進入第5層必須進入下一層
            For j = i To m - n + layers
                ' s = s & j
    com(j + 1, layers + 1, s & j)'每一層起點是上一層的+1終點是m-n+layers ,s+j是各層出的組合值
            Next
        Else
            ans = ans & s & "/"  '裝入變數ans
        End If
    End Sub

'產生陣列的索引值
 Dim st = ""
        Dim ansarray = Split(ans, "/")

        For i = 0 To UBound(ansarray) - 1
            Dim dg = ansarray(i)'5個索引值
            For j = 1 To Len(dg)
                Dim g = Mid(dg, j, 1)
                st = st & charray(g - 1) & "/"  '產生5個號碼放入變數st

            Next
            ' MsgBox(st)
            Dim co = compare(st, target) '中幾個號碼
            numb(co) += 1 '索引值為對幾次2表示對中2個號碼-則加1
            st = ""
        Next

Dim targetans = ""
        For i = 2 To 5

            targetans = targetans & numb(i) & "," '中2 3 4 5個號碼次數用變數串起
        Next
        MsgBox(targetans)



Function compare(ByVal s1, ByVal s2)  '比較中獎號碼s2函數
        Dim g = Split(s1, "/")
        Dim nu = 0
        For i = 0 To UBound(g) - 1
            Dim a = g(i)
            If InStr(s2, a) <> 0 Then nu += 1' 每一個號碼有在中獎號碼中則加1
        Next
        Return nu
    End Function

影音解說












留言

這個網誌中的熱門文章

商科賽題目-排列組合後幾A幾B的判定