麻将胡牌算法

用数字代替麻将中的所有牌:

一万~九万    1~9

一筒~九筒    11~19

一条~九条    21~29

东、南、西、北、中、发、白    31~37

 

胡牌的种类:对对胡、十三幺和33332

 

判断胡牌的过程(以下所说的规则,都是针对手牌已经按从小到大的顺序排序):

1、首先判断手牌的总数是否为3n+2,如果不是肯定不是胡牌。

2、先从特殊的下手,如果手牌为14张的时候,就有可能是“对对胡”或者“十三幺”,先判断是否为这两种特殊胡牌,如果不是,再继续下面的判断。排除特殊情况,那么要胡,就只能是“33332”。

3、遍历所有的手牌,找到一种牌的数量>=2的,那么“33332”中的“2”就有可能从这种牌中抽取2张作为这个“2”,然后把这2张去掉,剩下的手牌就是3n张,再判断剩下的3n张牌是否能组成顺子或者是暗刻,如果可以全部组成,那么说明这牌就胡了。否则需要找下一种牌当成“2”,再重复上面的判断,直到找到为止,找不到就是不胡啦。

 

判断剩下的3n张牌是否能组成顺子或者是暗刻,是通过判断第一种牌的数量:

①如果是1张或2张,要胡牌的话,它必须和后面的牌组成顺子,否自不能胡。如果可以,将组成顺子的牌移除,接着处理剩下的牌。

②如果是3张,要胡牌有两种可能,一种是把3张当做是暗刻,另一种是这3张都与后面的牌组成顺子。如果只是判断胡不胡牌,这两种任意一种都是一样的,如果要计算分数,就要自己分开算了。

③如果是4张,要胡牌的话,有1张要和后面的牌组成顺子,剩下的3张牌又可以继续②操作。

整个过程可以通过函数的递归调用,每次处理一张,如果不能凑成顺子或者暗刻就不能胡,直接返回错误,如果可以则继续判断,直到牌数为0,则就是胡了,返回成功即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值