德州扑克:判断牌面是否有同花顺

字节跳动实习面试算法题


1、题目描述

什么是同花顺:5张牌,牌面数字能够连续,则是顺子;花色相同则为同花;能找出5张花色相同且牌面数字连续的,即是同花顺。
副牌4种花色分别是♠,♥,♣,◆。每个花色从A到K共13张牌,总共
4*13=52张牌。
要求:用0-51表示这52张牌,按照顺序,♠A-♠K为0-12,♥A-♥K为13-25,♣A-♣K为26-38,◆A-◆K为39-51。
一副牌,从中任意发出7张牌,存在数组input中,实现一个judge函数返回true或者false判断是否有同花顺。

// 样例
function judge(input){
let arr =[9,5,6,7,7,8,0,11]//56789是同花顺
let arr2 = [0,4 6 7 8 9, 9 11]
console.log(judge(arr))/true
console.log(judge(arr2))// false

二、解题思路

简单模拟: 先判断顺子,再检查同花色

三、Python代码实现

# poker = [9,5,6,7,7,8,0,11]
poker = eval(input())
# 分别封装♠,♥,♣,◆ 四种花色
def spade(x):
    if x >= 0 and x <= 12:
        return True
    else:
        return False

def heart(x):
    if x >= 13 and x <= 25:
        return True
    else:
        return False
    
def club(x):
    if x >= 26 and x <= 38:
        return True
    else:
        return False
    
def diamond(x):
    if x >= 39 and x <= 51:
        return True
    else:
        return False

def check_suit(x,y): # 检查x和y是否为同一种花色
    if spade(x) and spade(y):
        return True
    if heart(x) and heart(y):
        return True
    if club(x) and club(y):
        return True
    if diamond(x) and diamond(y):
        return True
    return False

def judge(a:list):
    # 排序+去重——>错误做法
    # a.sort()
    # a = list(set(a))

    a = list(set(a))  # 先去重,去重后a中的元素是唯一的
    a.sort()          # 然后对去重后的列表进行排序

    if len(a) < 5: # 如果去重后的列表长度小于5,那么肯定不可能是顺子
        return False

    n = len(a)
    for i in range(n-4):
        if i+4 < n:
            if a[i] + 4 == a[i+4]: # 说明是顺子
                if check_suit(a[i],a[i+4]): # 说明是同花顺
                    return True
    
    return False

print(judge(poker))

四、参考链接

参考博客链接:判断7张扑克牌是否含有同花顺(5张同花顺子)

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值