(演算法)成都麻將

2021-09-08 11:24:45 字數 1763 閱讀 7429

說起麻將,那可是川渝市民的最愛,無論親朋好友聚會,還是業務談判,總是少不了麻將的聲音。

成都麻將只能包括3種型別:條,筒,萬。沒有「門、東南西北、紅中」。

每種牌都是數字從1到9,每個數字有4張,共36張。筒,萬,條均一樣。

胡牌簡化規則如下:

1.必須有乙個對子,即兩張相同的牌,比如:兩個2筒,兩個4條等。

2.剩餘的牌,每3張需要湊成乙個有效牌,比如:3個一樣的牌(3個2筒),或者3個順子(1條2條3條),如果所有的牌都能夠湊好,再滿足規則2和1,有乙個對子,並且所有的牌只有兩種型別,那麼就可以胡牌了。

3.假設牌不會出現碰的情況,即輸入的牌肯定是13張。

4.輸入牌肯定都是麻將牌,不用考慮異常輸入;也不用考慮會輸入「門」,「紅中」等成都麻將中不會出現的牌。

5.條用t表示,d用d表示,萬用w標識。

6.不用考慮輸入的合法性,這個由函式的使用者保證。輸入的牌為字串,字母為大寫的tdw」

要求根據13個已知輸入,判斷可以胡那幾張牌。

輸入:

輸入13張麻將牌,如"1t8t6w6w5d4w1t3w6w2w5d6t1t"

輸出:

輸出胡牌個數和要胡的牌,

其中胡牌個數佔一行輸出,胡哪一張牌佔一行輸出,

胡多張牌,輸出數促按照t/d/w的順序從小到大排列(如1t5t6d7d3w8w)。17t

遍歷所有的牌,即在輸入13張牌中,加入1t~9t,1d~9d,1w~9w中的任一張,然後判斷該14張牌是否能胡。

#include#include

#include

using

namespace

std;

#define num 9

void copy(vector &tmp,const vector &count);

void getcount(const

string &str,vector &count);

bool tryhu(vector &count,int

len);

bool ishu(vector &count);

string translate(int

i);int

main()

cout

count[i]--;

}cout

for(int i=0;i)

cout

}return0;

}void getcount(const

string &str,vector &count)

if(str[i+1]=='d'

)

if(str[i+1]=='w'

) }

}void copy(vector &tmp,const vector &count)

bool tryhu(vector &count,int

len)}}

else

if(len%3==0

) }

for(int i=0;i3;i++) }}

}return

false;}

bool ishu(vector &count)

/*void int2str(const int &a,string &str)

*/string translate(int

i)

return

r;}

麻將胡牌演算法

majiang algorithm是帶多張鬼牌的通用胡牌演算法,採用查表方式,簡單高效。在生成表的階段,時間是不值錢的,所以生成方法我們可以任意窮舉。首先分為普通 風 箭三張表。窮舉出所有的key,比如普通表,就是000000000 444420000,因為每一種牌最大4張,且總和不超過14張牌。對...

超簡單的麻將演算法

麻將的演算法 提高篇 1.先說說,數值的構成。型別字 0 東南西北中發白 1 2,3 4,5 6,7 型別萬 1 1 萬2萬3萬4 萬5萬6 萬7萬8 萬9萬 11,12 13,14 15,16 17,18 19型別條 2 1條2 條3條4 條5條6 條7條8 條9條 21,22 23,24 25,...

麻將演算法(四)吃牌

吃牌分為三種 左吃 左吃牌牌值一定是大於0小於6的 中吃 中吃牌牌值一定是大於1小於7的 右吃 右吃牌牌值一定是大於2小於8的 因此,如果傳進來的是牌值,需要將其轉化為索引,是索引的話就直接進行對9取餘的操作,進入篩選,如果是左吃的話,傳進來的牌一定不等於這個連牌中的第乙個值,同理,中吃和右吃不等於...