#18732: 牌型判斷及分數計算


geminibaga (geminibaga)

學校 : 不指定學校
編號 : 54758
來源 : [140.116.239.180]
最後登入時間 :
2024-04-10 12:03:45
b519. 撲克牌遊戲-商競103 -- 103學年度商業類程式設計競賽模擬題 | From: [140.116.250.162] | 發表日期 : 2019-08-02 00:41

五張牌的相關的牌型如下:
「同花順」為同花色五張連續數字,相同花色的「順子」,得分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 分。

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

這題的牌型跟分數,相信大家雖然看得懂,但要把這些規則與計分一一寫出來光是想到就懶了

這邊提供一個簡便的方式:

 

先把牌型分成兩類:「順子類」、「對子(pair)類」

如果有牌重複→對子類

沒有牌重複→順子類(也可能是雜牌)

 

先說明順子類的判斷:

因為已經確定沒有牌重複,所以把五張牌排序後,最大牌點數-最小牌點數如果是4就是順子,

再處理例外情形(10~A),排出來會變(1,10,11,12,13),此時可以從第一張跟第二張牌有最大的差距來檢查

而不用一一判斷。

順子如果花色相同就是同花順,要轉成花色後判斷或直接從輸入的數字判斷都行

 

接著是對子的判斷:

「一對」得分1分;

「兩對」得分2分;

「三條」得分3分;

「葫蘆」得分5分;

「四條」得分6分;

這些牌型跟分數都是建立在相同點數之下,底下用a,b,c,d,e代表不同的點數:

a   b   c   d   e   五張牌點數都不同,0分(在尚未判斷是否為順子情況下)

a   a   b   c   d     「一對」得分1分

     ↑  輸入第二張a 時,發現前面有一張a了,分數+1

a   a   b   b   d      「兩對」得分2分

    ↑ 輸入第二張a 時,發現前面有一張a了,分數+1

               ↑  輸入第二張b 時,發現前面有一張b了,分數+1

a   a   a   b   c      「三條」得分3分

    ↑ 輸入第二張a 時,發現前面有一張a了,分數+1

         ↑  輸入第三張a 時,發現前面有兩張a了,分數+2

a   a   a   b   b      「葫蘆」得分5分

    ↑ 輸入第二張a 時,發現前面有一張a了,分數+1

         ↑  輸入第三張a 時,發現前面有兩張a了,分數+2

                 ↑  輸入第二張b 時,發現前面有一張b了,分數+1

a   a   a   a   b      「四條」得分6分

    ↑ 輸入第二張a 時,發現前面有一張a了,分數+1

         ↑  輸入第三張a 時,發現前面有兩張a了,分數+2

             ↑  輸入第四張a 時,發現前面有三張a了,分數+3

 

用這方式計算下來,所有的對子類型都可以有一個規律的「分數」算法,每種牌型分數又不同,且各牌型的分數幾乎跟題目的得分相同,

唯一只有「葫蘆」分數4分,只要判斷這情況再把1分補上即可。

 

以上

 
ZeroJudge Forum