A、B两个人使用一副扑克牌打斗地主,其中,3--10---J--A之间5张及以上的连续牌称为顺子,输入A手中的牌,在输入A已经出的牌,打印出B可以出的最大顺子。如果B的牌不存在顺子,打印NO-CHA

本文介绍了一种基于扑克牌组合的算法,通过A手中的牌和已出牌分析,计算B可能的最大顺子序列。核心函数char_to_int和int_to_char用于转换JQKA字符到数字。关键步骤包括找出B的潜在顺子组合并判断是否存在最长链。
摘要由CSDN通过智能技术生成
例如:
输入 A手中牌为:3-3-3-3-4-4-5-5-6-7-8-9-10-J-Q-K-A
再输入A已经出的牌:4-5-6-7-8-8-8
得到B可以出的最大顺子为:9-10-J-Q-K-A
例如:
输入 A手中牌为:3-3-3-3-8-8-8-8
再输入A已经出的牌:K-K-K-K
得到B可以出的最大顺子为:NO-CHAIN
def char_to_int(str_list:list):
    for i in range(len(str_list)):
        if str_list[i] == 'J':
            str_list[i] = '11'
        elif str_list[i] == 'Q':
            str_list[i] = '12'
        elif str_list[i] == 'K':
            str_list[i] = '13'
        elif str_list[i] == 'A':
            str_list[i] = '14'
    return str_list

def int_to_char(str_list:list):
    for i in range(len(str_list)):
        if str_list[i] == '11':
            str_list[i] = 'J'
        elif str_list[i] == '12':
            str_list[i] = 'Q'
        elif str_list[i] == '13':
            str_list[i] = 'K'
        elif str_list[i] == '14':
            str_list[i] = 'A'
    return str_list

A_shou = ['3', '3', '3', '3', '4', '4', '5', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
A_chu = ['4', '5', '6', '7', '8', '8', '8']
A_all = A_shou + A_chu
A_all = char_to_int(A_all)    # 把JQKA转为数字
A_all = list(map(int,A_all))    #把A手里的牌转为数字
all_pai = list(range(3,15))*4   #所有扑克牌
for n in A_all:       #所有的牌减掉A的所有牌,得到B的所有牌
    all_pai.remove(n)
B_all = list(set(all_pai))    #得到去重后B所有的牌
B_all.sort(reverse=True)

all_list = []
sub_list = []
for x in B_all:
    sub_list.append(x)
    if x-1 not in B_all:
        if len(sub_list)!=1:
            all_list.append(sub_list)
        sub_list = []
print(all_list)
all_list.sort(key=len,reverse=True)
if len(all_list[0])<5:
    print('NO-CHAIN')
else:
    shunzi = list(map(str,all_list[0]))
    shunzi = int_to_char(shunzi)
    print("-".join(shunzi[::-1]))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值