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