一、平胡简介
麻将平胡牌(无财神):N(0、1、2、3、4)个三牌和1个对子,手牌总数为 N * 3 + 2。
二、平胡计算
1、先检测手牌数量是否符合要求。
2、获得可能的三牌集(三连[1, 2, 3]、三同[1, 1, 1])和对子集(对子[1, 1])。
3、使用组合函数,获得所有可能的三牌组合集,每个组合包括N个三牌。
4、若无三牌组合,则是单调平胡,则直接遍历对子集,若有对子在手牌中数量足够,则可胡牌。
5、若有三牌组合,遍历三牌组合集,若三牌组合集中所有的三牌都在手牌中数量足够,再遍历对子集,若有对子在手牌中数量足够,则可胡牌。
三、测试函数
测试函数中的arr的下标为麻将牌唯一标志,值为该麻将牌数量。
#define LEN 34 // 万(0 - 8)、条(9 - 17)、筒(18 - 26)、东南西北中发白(27 - 33)
enum GROUP_TYPE
{
GROUP_GANG,
GROUP_LIAN,
GROUP_PENG,
GROUP_PAIR
};
struct CardGroup
{
int card;
GROUP_TYPE type;
};
int main(int argc, char *argv[])
{
int arr[LEN] = {0};
arr[0] = 2;
finishCard(ar