2010年10月8日 星期五

抽紙牌(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

3 則留言:

  1. Dim strQ As String
    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, Al
    ReDim Pok(Al) As Integer, Nu(Al) As Integer
    Line Input #1, strQ
    Input #1, w
    AA = Split(strQ)
    k = 1
    st = "SHDC"
    For i = 0 To Al * 2 - 1 Step 2
    For Q = 1 To 4
    If AA(i) = Mid(st, Q, 1) Then Pok(k) = Q
    Next Q
    Nu(k) = AA(i + 1)
    k = k + 1
    Next i
    For i = 1 To Al
    For j = i To Al
    If Nu(j) > Nu(i) Then
    Call ch(Nu(j), Nu(i))
    Call ch(Pok(j), Pok(i))
    ElseIf Nu(j) = Nu(i) Then
    If Pok(j) < Pok(i) Then
    Call ch(Nu(j), Nu(i))
    Call ch(Pok(j), Pok(i))
    End If
    End If
    Next j
    Next i
    Print #2, Mid(st, Pok(w), 1) & " " & Nu(w)
    Close #2
    Close #1
    End
    End Sub
    Public Sub ch(ByRef A2, ByRef A3)
    c = A2
    A2 = A3
    A3 = c
    End Sub


    BY 小白

    回覆刪除
  2. Dim q(100) As Integer
    Dim qq(100) As String
    Private Sub Form_Load()
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, x
    Input #1, dat
    Input #1, n
    kk = Split(dat)
    For i = 0 To x - 1
    a = kk(i * 2)
    b = kk(i * 2 + 1)
    qq(i) = a
    Select Case a
    Case "S"
    a = 4
    Case "H"
    a = 3
    Case "D"
    a = 2
    Case "C"
    a = 1
    End Select
    q(i) = Val(b & a)
    Next i
    For i = 0 To x - 1
    For j = i + 1 To x
    If q(i) < q(j) Then
    mm = q(i): q(i) = q(j): q(j) = mm
    mm = qq(i): qq(i) = qq(j): qq(j) = mm
    End If
    Next j
    Next i
    Print #2, qq(n - 1); (q(n - 1) \ 10)
    Close #2
    Close #1
    End Sub
    BY 阿揚

    回覆刪除
  3. 程式都OK, 就是先將紙牌重新給值,再排序。

    回覆刪除