寻找最大葫芦 | 豆包MarsCode AI刷题

问题描述

在一场经典的德州扑克游戏中,有一种牌型叫做"葫芦"。"葫芦"由五张牌组成,其中包括三张相同牌面值的牌 aa 和另外两张相同牌面值的牌 bb。如果两个人同时拥有"葫芦",我们会优先比较牌 aa 的大小,若牌 aa 相同则再比较牌 bb 的大小。

在这个问题中,我们对"葫芦"增加了一个限制:组成"葫芦"的五张牌牌面值之和不能超过给定的最大值 maxmax。牌面值的大小规则为:A > K > Q > J > 10 > 9 > ... > 2,其中 A 的牌面值为1,K 为13,依此类推。

给定一组牌,你需要找到符合规则的最大的"葫芦"组合,并输出其中三张相同的牌面和两张相同的牌面。如果找不到符合条件的"葫芦",则输出 "0, 0"。

python 复制代码
def solution(n, max, array):
    # Edit your code here
    value = [0] * 14
    a = 0
    b = 0
    for num in array:
        value[num] += 1
    for i in range(1, 14):
        if value[i] >= 3:
            for j in range(1, 14):
                if value[j] >= 2 and j != i:
                    sum = i * 3 + j * 2
                    # print(i,j,sum)                
                    if sum <= max:
                        if i != 1:
                            if a != 1 and i > a:
                                a = i
                                b = j
                            elif i == a:
                                if j != 1:
                                    if b != 1 and j > b:
                                        a = i
                                        b = j
                                elif j == 1:
                                    a = i
                                    b = j
                        elif i == 1:
                            if a != 1:
                                a = i
                                b = j
                            else:
                                if j != 1:
                                    if b != 1 and j > b:
                                        a = i
                                        b = j
                                elif j == 1:
                                    a = i
                                    b = j                                

    print(a, b)
    return [a, b]

当然,我会解释一下你的代码思路。

代码思路解释

  1. 统计牌的数量

    • 使用了一个长度为14的数组 value 来统计每种牌的数量。数组的索引代表牌面值,数组的值代表该牌面值的牌的数量。
    • 例如,value[6] 表示牌面值为6的牌的数量。
  2. 遍历所有可能的牌面值组合

    • 使用两个嵌套的 for 循环来遍历所有可能的牌面值组合。外层循环遍历可能的三张相同牌面值的牌 i,内层循环遍历可能的两张相同牌面值的牌 j
    • 确保 ij 不相等,并且 i 的牌面值数量至少为3,j 的牌面值数量至少为2。
  3. 计算牌面值之和

    • 计算当前组合的牌面值之和 sum,即 i * 3 + j * 2
    • 如果 sum 小于或等于给定的最大值 max,则继续判断是否更新当前的最佳组合。
  4. 更新最佳组合

    • 使用一系列复杂的 if 语句来判断是否更新当前的最佳组合 ab
    • 考虑了牌面值 A 的特殊情况,并确保在牌面值相同的情况下,选择较大的 j
  5. 输出结果

    • 使用 print(a, b) 输出最终的最佳组合。

代码逻辑总结

  • 首先统计每种牌的数量。
  • 然后遍历所有可能的牌面值组合,计算牌面值之和。
  • 如果牌面值之和小于或等于给定的最大值,则更新最佳组合。
  • 最后输出最佳组合。
相关推荐
静水流深3977 天前
03 模型IO| 豆包MarsCode AI刷题
青训营笔记
用户247841860028 天前
第七次算法笔记 | 豆包MarsCode AI刷题
青训营笔记
幻612 天前
小S的倒排索引 | 豆包MarsCode AI刷题
青训营笔记
用户8260144283014 天前
469. 环形数组最大子数组和问题
青训营笔记
用户6057219209814 天前
奇妙货币交易问题 | 豆包MarsCode AI刷题
青训营笔记
我明天再来学Web渗透15 天前
“抖音互联网架构分析及高可用系统构建思考”(方向三)| 豆包MarsCode AI刷题
青训营笔记
用户3021330662016 天前
第三次刷题 | 豆包MarsCode AI刷题
青训营笔记
用户91059730277021 天前
CSS详解| 豆包MarsCode AI刷题
青训营笔记
huyck21 天前
伴学笔记1|豆包MarsCode AI 刷题
青训营笔记
用户19700900815381 个月前
实现一个TodoList | 青训营 x 豆包MarsCode技术训练营
青训营笔记