2012年9月30日 星期日

100模擬 Problem 4-1:撲克牌遊戲


小朋友常喜歡玩很多撲克牌的遊戲。撲克牌有四種花色,黑桃、紅桃、方塊、和梅花。
「同花順」為同花色五張連續數字;相同花色的「順子」。
「四條」為四張同數字的牌,外加任一單張的五張牌;
「葫蘆」為三張同數字,另兩張同數字的牌;一個「一對」和「三條」所組成的五張牌;
「順子」為五張數字連續的牌,數字各差1點的連續牌,從 A-2-3-4-5(1-2-3-4-5),到
10-J-Q-K-A(10-11-12-13-14 沒有J-Q-K-A-2) ;;
「三條」為三張同數字;
「兩對」是有兩對兩兩同數字的牌;
「一對」則是只有兩張同數字;
「雜牌」指不屬於以上任何一種組合。
五張牌依照牌面可能有多種組合,一般判斷大小的順序如下:
同花順 > 四條 > 葫蘆 > 順子 > 三條 > 兩對 > 一對 > 雜牌
同樣組合時,先比數字大小(A 最大再來是K(13)大,2 最小)再比花色。花色大小順序
為黑桃 > 紅桃 > 方塊 > 梅花
例如黑桃同花順 9,10,11,12,13 小於紅桃同花順10,11,12,13,A 但大於方塊同花順
9,10,J(11),Q(12),K(13)。葫蘆以三條的大小作判斷,也就是說2,2,10,10,10 大於8,8,9,9,9。兩對則以較大的對作判斷,同樣數字時,有黑桃的人贏。雜牌以其中最大的牌作判斷。請幫小朋友們寫個程式,判斷手上的五張牌是什麼牌。
輸入說明:
輸入資料含多組測試案例,第1 行的數字n 代表有幾筆資料要測試,而n 的值介於1 和10之間,每個案例有五張牌,每組測試案例,為小朋友手上的牌,每張牌以一個字母表示花色
(S 表黑桃,H 表紅桃,D 表方塊,C 表梅花)及一個介於1~13 之間的數字(A:1、J:11、Q:12、K:13)。
輸出說明:
按照小朋友手上的五張牌,判斷其為何種牌,結果輸出其代碼。
「同花順」為同花色五張連續數字;則輸出 123456。
「四條」為四張同數字的牌;則輸出 4。
「葫蘆」為三張同數字,另兩張同數字的牌;則輸出 32。
第 12 頁,共 13 頁
「順子」為五張數字連續的牌,其中A(1)與K(13)得相接(可以把A 看成1 或14);則輸出12345。
「三條」為三張同數字;則輸出 3。
「兩對」是有兩對兩兩同數字的牌;則輸出 22。
「一對」則是只有兩張同數字;則輸出 1。
「雜牌」指不屬於以上任何一種組合。則輸出 0。
輸入範例:【檔名:in-4-1-1.txt】
3
S3 H5 S4 D5 C5
H1 D6 C6 H12 S12
S13 D12 H10 C11 S1
輸入範例:【檔名:in-4-1-2.txt】
2
D2 H5 S2 D5 C5
D3 H5 S2 D7 C8
輸出範例:【檔名:out-4-1.txt】
3
22
12345
32
0

1 則留言:

  1. Private Sub Form_Load()
    Me.Hide
    Dim h As Boolean
    Open App.Path & "\IN-4-1-1.TXT" For Input As #1
    Open App.Path & "\IN-4-1-2.TXT" For Input As #2
    Open App.Path & "\out.txt" For Output As #3
    For k = 1 To 2
    Input #k, n
    For L = 1 To n
    Line Input #k, x
    a = Split(x, " ")
    For j = 0 To UBound(a)
    List1.AddItem (Mid(a(j), 2) + 100) & " " & Mid(a(j), 1, 1)
    If Mid(a(j), 2) = 1 Then List1.AddItem "114" & " " & Left(a(j), 1)
    Next
    h = False
    s = 1
    s1 = 1
    For i = 0 To List1.ListCount - 2
    b = Split(List1.List(i), " ")
    c = Split(List1.List(i + 1), " ")
    If Val(b(0)) = Val(c(0) - 1) Then s = s + 1
    If b(1) = c(1) Then s1 = s1 + 1
    Next
    If s = 5 And s1 = 5 Then Print #3, "123456": h = True
    If s = 5 And s1 <> 5 Then Print #3, "12345": h = True

    s = 1: s2 = 0: s3 = 0: s4 = 0
    For i = 0 To List1.ListCount - 2
    b = Split(List1.List(i), " ")
    c = Split(List1.List(i + 1), " ")
    If Val(b(0)) = Val(c(0)) Then s = s + 1: h = True
    If s = 4 Then s4 = s4 + 1
    If s = 3 And Val(b(0)) <> Val(c(0)) Then s3 = s3 + 1: s = 1
    If s = 2 And Val(b(0)) <> Val(c(0)) Then s2 = s2 + 1: s = 1
    If i = (List1.ListCount - 2) Then
    If s = 2 Then s2 = s2 + 1
    If s = 3 Then s3 = s3 + 1
    End If
    Next
    If s4 = 1 Then
    Print #3, "4"
    ElseIf s3 = 1 And s2 = 1 Then Print #3, "32"
    ElseIf s3 = 1 And s2 < 1 Then Print #3, "3"
    ElseIf s2 = 2 Then Print #3, "22"
    ElseIf s2 = 1 Then Print #3, "1"
    End If
    If h = False Then Print #3, "0"
    List1.Clear
    Next
    Next
    Close
    Close
    Close
    End
    End Sub

    回覆刪除