2012年11月20日 星期二

抽紙牌(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. Dim num() As String
    Private Sub Command1_Click()
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, mycount
    ReDim num(mycount)
    Input #1, temp
    strr = Split(temp, " ")
    countt = 1
    For i = 0 To mycount * 2 - 1
    tempp = tempp & strr(i)
    If i Mod 2 <> 0 Then num(countt) = tempp: countt = countt + 1: tempp = ""
    Next
    countt = countt - 1
    For ii = 1 To countt - 1
    For iii = ii + 1 To countt
    If Val(Mid(num(ii), 2, Len(num(ii)) - 1)) < Val(Mid(num(iii), 2, Len(num(iii)) - 1)) Then
    ttemp = num(ii): num(ii) = num(iii): num(iii) = ttemp
    ElseIf Val(Mid(num(ii), 2, Len(num(ii)) - 1)) = Val(Mid(num(iii), 2, Len(num(iii)) - 1)) Then
    If Asc(Mid(num(ii), 1, 1)) < Asc(Mid(num(iii), 1, 1)) Then ttemp = num(ii): num(ii) = num(iii): num(iii) = ttemp
    End If
    Next
    Next
    Input #1, ans
    Print #2, Mid(num(ans), 1, 1) & " " & Mid(num(ans), 2, Len(num(ans)) - 1)
    Close #2
    Close #1
    End
    End Sub

    回覆刪除
  2. Dim b() As String
    Dim c() As Integer
    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, n
    ReDim b(Val(n)), c(Val(n))
    Input #1, x
    Input #1, f
    a = Split(x)
    For i = 0 To UBound(a)
    If i Mod 2 = 0 Then b(i \ 2 + 1) = a(i) Else c(i \ 2 + 1) = a(i)
    Next i
    For i = 1 To UBound(c)
    For j = i + 1 To UBound(c)
    If c(i) < c(j) Then z = c(i): c(i) = c(j): c(j) = z: y = b(i): b(i) = b(j): b(j) = y
    If c(i) = c(j) Then
    If b(i) < b(j) Then z = c(i): c(i) = c(j): c(j) = z: y = b(i): b(i) = b(j): b(j) = y
    End If
    Next j
    Next i
    Print #2, b(Val(f)) & " " & c(Val(f))
    Close #2
    Close #1
    End
    End Sub

    回覆刪除