說起麻將,那可是川渝市民的最愛,無論親朋好友聚會,還是業務談判,總是少不了麻將的聲音。
成都麻將只能包括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取餘的操作,進入篩選,如果是左吃的話,傳進來的牌一定不等於這個連牌中的第乙個值,同理,中吃和右吃不等於...