zoj 1111 Poker Hands

注:轉自http://www.cnblogs.com/hoodlum1980/archive/2009/04/18/1319107.html

//hoodlum1980 ( 發發 ) 的技術博客

代碼寫的相當的有條理,很清晰。

雖然思路很清楚,但是寫起來還真的有點難,而且花時間,所以轉了……

 

         (比較兩手牌的大小)

          http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=111

          題目描述:這道題要求比較兩手牌的大小。每手牌都有5張牌組成,牌的大小的定義如下,首先確定這組牌的所屬種類是下面哪一種(若同屬同一種類,則根據該分類後面的比較規則繼續比較,所屬種類越靠後牌越大)。

          ● High Card:雜牌(不屬於下面任何一種)。根據牌從大到小的順序依次比較。

          ● Pair:有一對,加3張雜牌組成。先比較對的大小,再從大到小的順序比較雜牌。

          ● Two Pairs:有兩對,加1帳雜牌。先從大到小比較對的大小,再比較雜牌。

          ● Three of a Kind:有3張值相同的牌。比較這個值即可。

          ● Straingt:一條龍。即5張牌連續。比較最大的一張牌即可。

          ● Flush:清一色。即5張牌花色相同。和雜牌一樣比較。

          ● Full House:3張值相同的牌,加上一對。比較三張相同的值即可。

          ● Four of a kind:有4張牌相同,即相當於一副“炸彈”。

          ● Straight flush:同花順。即5張牌花色相同,並且連續。例如同花色的34567。

          題目輸入多行,每一行含有10張牌,前五張屬於Black,後五張屬於White,每張牌由“牌值”字符和“花色”字符組成,注意10用大寫字母T表示。牌從小到大的順序是2,3,4,5,6,7,8,9,T,J,Q,K,A。要求輸出比較結果。

          例如輸入:

          2H 3D 5S 9C KD 2C 3H 4S 8C AH   (輸出:White wins.)

          2H 4S 4C 2D 4H 2S 8S AS QS 3S   (輸出:Black wins.)

          2H 3D 5S 9C KD 2C 3H 4S 8C KH  (輸出:Black wins.)

          2H 3D 5S 9C KD 2D 3H 5C 9S KH  (輸出:Ties.)

          ----------------------------------------------------------------------------------------

          分析:該題目還是屬於一道簡單題,我們只需要根據題目要求的比較規則去比較即可,我們假設一副牌所屬的種類,用level值表示,level越大則牌越大。使用一個函數 int GetLevel(...) 來獲取一副牌所屬的種類。這裏再判斷牌的level之前,由於輸入是亂序的,爲了判別我們需要先把5張牌按從小到大的順序排序。這裏的排序只有5張牌,屬於非常小規模的問題,因此我使用了交換數據成本最低的選擇排序。同時,兩幅牌的level如果相同,則我們還要具體根據牌的點數(value)做進一步判斷,因此我們給GetLevel函數再傳入一個int數組,把同level的繼續比較的指標點數按順序放入這個數組。這樣,當level相同時,我們就繼續從頭查看order數組裏的判別指標來繼續判斷。該題目的全部代碼如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章