B 東東學打牌

2021-10-05 07:29:18 字數 3914 閱讀 6028

最近,東東沉迷於打牌。所以他找到 hrz、zjm 等人和他一起打牌。由於人數眾多,東東稍微修改了億下遊戲規則:

所有撲克牌只按數字來算大小,忽略花色。

每張撲克牌的大小由乙個值表示。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。

每個玩家抽得 5 張撲克牌,組成一手牌!(每種撲克牌的張數是無限的,你不用擔心,東東家裡有無數副撲克牌)

理所當然地,一手牌是有不同型別,並且有大小之分的。

舉個栗子,現在東東的 「一手牌」(記為 α),瑞神的 「一手牌」(記為 β),要麼 α > β,要麼 α < β,要麼 α = β。

那麼這兩個 「一手牌」,如何進行比較大小呢?首先對於不同型別的一手牌,其值的大小即下面的標號;對於同型別的一手牌,根據組成這手牌的 5 張牌不同,其值不同。下面依次列舉了這手牌的形成規則:

1、大牌:這手牌不符合下面任乙個形成規則。如果 α 和 β 都是大牌,那麼定義它們的大小為組成這手牌的 5 張牌的大小總和。

2、對子:5 張牌中有 2 張牌的值相等。如果 α 和 β 都是對子,比較這個 「對子」 的大小,如果 α 和 β 的 「對子」 大小相等,那麼比較剩下 3 張牌的總和。

3、兩對:5 張牌中有兩個不同的對子。如果 α 和 β 都是兩對,先比較雙方較大的那個對子,如果相等,再比較雙方較小的那個對子,如果還相等,只能比較 5 張牌中的最後那張牌組不成對子的牌。

4、三個:5 張牌中有 3 張牌的值相等。如果 α 和 β 都是 「三個」,比較這個 「三個」 的大小,如果 α 和 β 的 「三個」 大小相等,那麼比較剩下 2 張牌的總和。

5、三帶二:5 張牌中有 3 張牌的值相等,另外 2 張牌值也相等。如果 α 和 β 都是 「三帶二」,先比較它們的 「三個」 的大小,如果相等,再比較 「對子」 的大小。

6、炸彈:5 張牌中有 4 張牌的值相等。如果 α 和 β 都是 「炸彈」,比較 「炸彈」 的大小,如果相等,比較剩下那張牌的大小。

7、順子:5 張牌中形成 x, x+1, x+2, x+3, x+4。如果 α 和 β 都是 「順子」,直接比較兩個順子的最大值。

8、龍順:5 張牌分別為 10、j、q、k、a。

作為乙個稱職的魔法師,東東得知了全場人手裡 5 張牌的情況。他現在要輸出乙個排行榜。排行榜按照選手們的 「一手牌」 大小進行排序,如果兩個選手的牌相等,那麼人名字典序小的排在前面。

不料,此時一束宇宙射線掃過,為了躲避宇宙射線,東東慌亂中清空了他腦中的 cache。請你告訴東東,全場人的排名

輸入

輸入包含多組資料。每組輸入開頭乙個整數 n (1 <= n <= 1e5),表明全場共多少人。

隨後是 n 行,每行乙個字串 s1 和 s2 (1 <= |s1|,|s2| <= 10), s1 是對應人的名字,s2 是他手裡的牌情況。

輸出

對於每組測試資料,輸出 n 行,即這次全場人的排名。

樣例輸入

3dongdong aaa109

zjm 678910

hrz 678910

樣例輸出

hrzzjm

dongdong、

這道題是一道特殊的排序題,簡單來想就是將每個人按照手上的牌排序,我們設立乙個玩家結構體,資料變數有自己的名字,牌屬於哪一種,以及若是屬於相同的牌種進行比較的引數,若是假設我們已經將這些全部搞定,最後就是sort一下,過載一下結構體的《符號。

如何來確定牌屬於哪一種,以及若是屬於相同的牌種進行比較的引數。我們可以按照不同種的牌的特點來判斷,具體**有所展示,找出是哪種牌之後將他的同種牌比較引數計算出來,傳入到結構體中,最後過載《即可。

#include

#include

#include

#include

using

namespace std;

struct person};

person per[

100005];

void

getinf

(int

* k,

int& which,

int& cmp1,

int& cmp2,

int&c***)

bool judge =

true

;for

(int i =

0; i <

4&& judge; i++)if

(judge)

judge =

true

;for

(int i =

0; i <

3&& judge; i++)if

(judge)

judge =

true

;for

(int i =

1; i <

4&& judge; i++)if

(judge)

judge =

true

;for

(int i =

0; i <

2&& judge; i++)if

(k[3

]!= k[4]

)judge =

false;if

(judge)

judge =

true

;for

(int i =

2; i <

4&& judge; i++)if

(k[0

]!= k[1]

)judge =

false;if

(judge)

int t =-1

; judge =

false

;while

(!judge &&

++t <3)

if(l ==

2)judge =

true;}

if(judge)

int o[2]

=;int tot =0;

for(

int i =

0; i <

4; i++)}

if(tot ==2)

} which =

3; cmp1 = k[o[1]

]; cmp2 = k[o[0]

]; c*** = k[xm]

;return;}

int lo =-1

;for

(int i =

0; i <

4; i++)}

if(lo !=-1

) which =

2; cmp1 = k[lo]

; cmp2 = s; c*** =0;

return;}

which =1;

int s =0;

for(

int i =

0; i <

5; i++

) cmp1 = s; cmp2 =

0; c*** =0;

}void

str_number

(string& x,

int&which,

int&cmp1,

int&cmp2,

int&c***)

else

else}}

getinf

(k, which, cmp1, cmp2,c***);}

int n =0;

intmain()

sort

(&per[1]

,&per[n +1]

);for(

int i = n; i >=

1; i--

) cout << per[i]

.name << endl;

}}

B 東東學打牌

最近,東東沉迷於打牌。所以他找到 hrz zjm 等人和他一起打牌。由於人數眾多,東東稍微修改了億下遊戲規則 所有撲克牌只按數字來算大小,忽略花色。每張撲克牌的大小由乙個值表示。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...

程式設計思維 B 東東學打牌

最近,東東沉迷於打牌。所以他找到 hrz zjm 等人和他一起打牌。由於人數眾多,東東稍微修改了億下遊戲規則 所有撲克牌只按數字來算大小,忽略花色。每張撲克牌的大小由乙個值表示。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...

東東學打牌

最近,東東沉迷於打牌。所以他找到 hrz zjm 等人和他一起打牌。由於人數眾多,東東稍微修改了億下遊戲規則 所有撲克牌只按數字來算大小,忽略花色。每張撲克牌的大小由乙個值表示。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...