python3 实现麻将胡牌问题

该博客讨论了如何使用Python3实现麻将胡牌问题的算法。内容包括判断给定的麻将牌组合是否满足和牌条件,即组合成刻子、顺子和一对对子。通过递归方法检查牌型,去除顺子和刻子,最终判断剩余的两张牌是否为一对以确定是否能胡牌。输入和输出描述也进行了详细说明。
摘要由CSDN通过智能技术生成

题目描述:
清一色是麻将番种之一,指由一种花色的序数牌组成的和牌.
数字1-9,每个数字最多有4张牌
我们不考虑具体花色,我们只看数字组合。
刻子:三张一样的牌;如: 111, 222, 333, …, 999
顺子:三张连续的牌;如: 123, 234, 345, …, 789
对子:两张相同的牌;如: 11, 22, 33, …, 99
需要实现一个程序,判断给定牌,是否可以和牌(胡牌)。
和牌要求:

  • 麻将牌张数只能是 2, 5, 8, 11, 14
  • 给定牌可以组合成,除1个对子以外其他都是刻子或顺子
    举例: - “11” -> “11”, 1对子,可以和牌
  • “11122233” -> “111”+“222”+“33”, 2刻子,1对子,可以
  • “11223344567” -> “11”+“234”+“234”+“567”, 1对子,3顺子,可以
    -> “123”+“123”+“44”+“567”, 另一种组合,也可以
    输入描述:
    合法C字符串,只包含’1’-‘9’,且已经按从小到大顺序排好;字符串长度不超过15。同一个数字最多出现4次,与实际相符。
    输出描述:
    C字符串,“yes"或者"no”

思路:输入字符合法性校验自然不用多说,本题使用递归求解,首先判断当前牌型是否包含顺子或者刻子,如果包含就去除这些字符,直到最后剩下两张牌时,再判断这两张牌是否相同,相同则可胡,不相同就胡不了了,具体实现看代码:

import copy

class ma_jiang():
    def __init__(self, pai_str):
        is_invalid_input = self.is_invalid_input(pai_str) #判断输入是否合法
        if is_invalid_input != False:
            print('Error Message: ' + is_invalid_input)
        else:
            print(self.if_win([int(i) for i in list(pai_str)]))

    def is_invalid_input(self, par_str):
        length = len(par_str)
        temp_str = list(par_str)
        temp_str.sort(
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值