b519: 撲克牌遊戲-商競103
內容
許多人常喜歡玩撲克牌,一副牌共有 52 張牌,有四種花色:黑桃、紅桃、方塊、和梅花。在撲克牌的玩法中,A 可作 1 點或 14 點,而 2-10 則為該牌之點數,另外 J、Q、K 分別為 11、12、13 點。在測試檔案中,每位玩家只會分到 5 張牌。下表將 52 張牌分別對應到數字 1~52,在測試檔案中,將以下表的數字代表某張牌。
點數
花色 A 2 3 4 5 6 7 8 9 10 J Q K
黑桃 1 2 3 4 5 6 7 8 9 10 11 12 13
紅桃 14 15 16 17 18 19 20 21 22 23 24 25 26
方塊 27 28 29 30 31 32 33 34 35 36 37 38 39
梅花 40 41 42 43 44 45 46 47 48 49 50 51 52
五張牌的相關的牌型如下:
「同花順」為同花色五張連續數字,相同花色的「順子」,得分 7 分;
「四條」為四張同數字的牌,外加任一單張的五張牌,得分 6 分;
「葫蘆」為三張同數字,另兩張同數字的牌;一個「一對」和「三條」所組成的五張牌;得分 5 分;
「順子」為五張數字連續的牌,數字各差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),得分 4 分;
「三條」五張牌中包含三張同數字的牌,得分 3 分;
「兩對」五張牌中包含兩對兩同數字的牌,但不是四張相同數字的牌(非四條),得分 2 分;
「一對」五張牌中包含只有兩張同數字的牌,得分 1 分;
「雜牌」指不屬於以上任何一種組合,得分 0 分。
本題目的是判斷手上的五張牌是屬於以上那一種牌型,以得分代替牌型。
輸入
每個輸入資料含多個玩家取得的撲克牌資料,在檔案 in1.txt 和 in2.txt 中,每個玩家分別各使用一副牌,第 1 列的數字 n 代表有幾筆玩家資料要測試, ,第二列起為測試資料,之後每列為每筆的測試資料,代表每個玩家拿到的五張撲克牌,五張牌所代表的數間以空白隔開,而空白不限定一個。如上表所示,每張牌以一個數字(1~52)代表,例如:以 18 代表紅桃 5。
6
3 44 4 19 7
6 12 1 32 45
26 25 2 38 39
15 18 2 28 41
14 21 22 23 24
1 13 26 27 39
輸出
按照每個玩家手上的 5 張牌,判斷每個玩家手上的五張牌是那一種牌型;以得分代替牌型。
5 張牌的數字所對應到的牌型分別如下:
3 44 4 19 7 -> 順子;得分 4 分
6 12 1 32 45 -> 三條;得分 3 分
26 25 2 38 39 -> 兩對;得分 2 分
15 18 2 28 41 -> 四條;得分 6 分
14 21 22 23 24 -> 雜牌;得分 0 分
1 13 26 27 39 -> 葫蘆;得分 5 分
4
3
2
6
0
5
解題思路
先將數字分別除上和取於 13 得到該牌的花色和數字並記錄下來。
再來分成兩部分解,第一部分判斷對子類,也就數字有是重複的部分,如果有產生任一種對子(含三條葫蘆等) 就必定不會產生順子類,因為順子要 5 張都不同。
第二部分判斷順子類,如果上面沒有產生任何對子類,那就只可能是同花順、順子或雜牌,再進行一次判斷即可。
完整程式碼
AC (2ms, 104KB)
|