主題

ZeroJudge - f712: 撲克排序-1 解題心得

Not In My Back Yard | 2021-04-07 00:00:01 | 巴幣 0 | 人氣 26

題目連結:


題目大意:
現在撲克牌的 52 張牌用 0 ~ 51 編號,其中 0 ~ 12 代表黑桃(Spade,以 S 代稱) A23456789TJQK(T 代表 10)、 13 ~ 25 代表紅心(Heart,以 H 代稱) A23456789TJQK、 26 ~ 38 代表紅磚(Diamond,以 D 代稱) A23456789TJQK、 39 ~ 51 代表黑梅(Club,以 C 代稱) A23456789TJQK。

輸入第一列給定一正整數 t (1 < t ≦ 20),代表有 t 筆測試資料,每筆佔一列。每列給定 52 個整數,其為數字 0 ~ 數字 51 的一種排列,即代表著撲克牌的一種排列。

現在玩家有 10 個人,牌堆第一張給第一個人、第二張給第二個人、……、第十張給第十個人、第十一張給第一個人、……以此類推。而每人會拿到五張牌(意即牌堆會剩兩張牌)。

而兩張撲克牌的大小比較為:先比較兩張的點數大小,如果不一樣則將點數大的排前面;如果點數一樣,則比較花色,其中 S > H > D > C,大的放前面。

兩副手牌的比較方式為:先比各自的點數最大的牌,一樣再比點數第二大、一樣再比點數第三大、第四大、第五大。如果五張點數都一樣,則比點數第一大的花色大小。其中,如果比出來大小則將大的排前面。

請將每位玩家的手牌各自由小排到大,再將每位玩家按照其牌組決定大小順序,最後將玩家們的順序輸出。輸出格式為玩家的編號並接著玩家的已排序之手牌,參見範例輸出。



範例輸入:
2
26 25 47 10 29 50 12 49 17 41 31 40 19 24 0 27 8 36 23 32 42 30 13 6 15 37 35 39 51 45 28 14 5 18 2 46 4 43 44 11 22 1 9 38 34 7 21 20 3 16 48 33
31 42 40 38 16 14 39 18 49 10 7 1 33 34 36 11 6 5 17 45 25 15 19 46 30 12 29 44 21 13 8 50 9 4 35 20 41 37 27 22 43 48 24 0 26 23 28 3 2 51 47 32


範例輸出:
Case 1:
8 CA DJ CJ H8 C5
3 HA ST C9 H7 S6
1 DA HT D6 C4 D3
5 SA D9 D4 S3 H3
4 DK HQ SJ S7 H6
9 CK HJ C6 H5 S4
7 SK DT S9 H9 S5
2 HK D5 S2 H2 C2
6 DQ CQ S8 C8 D2
10 SQ D7 C7 H4 C3
Case 2:
10 HA CK SJ HT C7
4 SA DK D9 C8 S5
5 DA DJ DT D5 H4
7 CA S7 D4 D3 C3
6 SK SQ HJ H8 H2
1 HK S9 S8 D6 C5
3 HQ ST D8 H7 C2
2 CQ CT C4 H3 S2
8 DQ S6 H6 C6 S4
9 CJ H9 H5 S3 D2


解題思維:
先將每個玩家的手牌按照比較規則由大到小排序。這樣一來等等比較手牌的時候,只要按照順序比即可,不用一直去找最大、第二大等等。

再來將各個玩家按照手牌大小排序,如同其他自定義排序的題目一樣,如這題




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作