2012年8月6日 星期一

抽紙牌(poker)


內容 : 
假設桌上放了一疊紙牌,這疊紙牌是從同一副完整的 52 張撲克牌 (不含鬼牌) 中任意抽出來的 N 張牌,且尚未經任何順序排列。
現在我們要從這 N 張牌中,找出其中依大小排列後的第 M 大的牌。
數字大小依據 K > Q > J > 10 > … > 2 > A 的順序排列。
若兩張牌數字相同,則依花色決定大小,且依 黑桃(S) > 紅心(H) > 方塊(D) > 梅花(C) 的順序排列。
輸入說明 :
輸入檔中的第一行為一個正整數 N ,代表有 N 張牌。
第二行則有 2N 個以空白相間隔的大寫英文字母或數字
每兩個相鄰的字母或數字代表一張牌的花色和數字大小
第三行則有一個正整數 M,代表我們要找的是第 M 大的牌。
為簡化起見,我們假設 N ≦ 52,1 ≦ M ≦ N,且不會有兩張花色和數字皆相同的牌重複出現。
輸出說明 :
印出第 M 大的牌
格式為 "花色 數字"
範例輸入 :help
S 1 H 9 D 9 H 13 S 12 
2
範例輸出 :
S 12

2 則留言:

  1. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, y
    Line Input #1, x
    x = Replace(x, " ", "")
    For i = 1 To Len(x)
    a = Mid(x, i, 1)
    If a = "S" Or a = "H" Or a = "D" Or a = "C" Then
    If Mid(x, i + 2, 1) <= 12 Then
    List1.AddItem Val(Mid(x, i + 1, 2) + 100) & " " & Mid(x, i, 1)
    Else
    List1.AddItem Val(Mid(x, i + 1, 1) + 100) & " " & Mid(x, i, 1)
    End If
    End If
    Next
    Input #1, n
    Print #2, Right(List1.List(List1.ListCount - n), 1) & " " & Val(Left(List1.List(List1.ListCount - n), 3) - 100)
    Close
    Close
    End
    End Sub

    回覆刪除
  2. Dim a()
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, x, y, z
    ReDim a(x)
    y = Replace(y, " ", "")
    c = 1
    For i = 1 To Len(y)
    If Mid(y, i, 1) = "S" Or Mid(y, i, 1) = "H" Or Mid(y, i, 1) = "D" Or Mid(y, i, 1) = "C" Then
    Select Case Mid(y, i + 1, 2)
    Case 10, 11, 12, 13
    a(c) = Mid(y, i, 3)
    List1.AddItem (Right(a(c), 2) + 100) & Mid(y, i, 1)
    Case Else
    a(c) = Mid(y, i, 2)
    List1.AddItem (Right(a(c), 1) + 100) & Mid(y, i, 1)
    End Select
    End If
    Next i
    Print #2, Right(List1.List(x - z), 1) & " " & Val(Left(List1.List(x - z), 3) - 100)
    Close #2
    Close #1
    End
    End Sub

    回覆刪除