寻找最大葫芦 | 豆包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) 输出最终的最佳组合。

代码逻辑总结

  • 首先统计每种牌的数量。
  • 然后遍历所有可能的牌面值组合,计算牌面值之和。
  • 如果牌面值之和小于或等于给定的最大值,则更新最佳组合。
  • 最后输出最佳组合。
相关推荐
用户7337855092594 天前
后端笔记 | go语言进阶与依赖管理
青训营笔记
用户705615332615 天前
刷题心得(三)| 豆包MarsCode AI刷题
青训营笔记
Damony16 天前
Chain of Thought(CoT)和Tree of Thoughts(ToT)| 豆包MarsCode AI刷题
青训营笔记
Find4 个月前
MaxKB 集成langchain + Vue + PostgreSQL 的 本地大模型+本地知识库 构建私有大模型 | MarsCode AI刷题
青训营笔记
理tan王子4 个月前
伴学笔记 AI刷题 14.数组元素之和最小化 | 豆包MarsCode AI刷题
青训营笔记
理tan王子4 个月前
伴学笔记 AI刷题 25.DNA序列编辑距离 | 豆包MarsCode AI刷题
青训营笔记
理tan王子4 个月前
伴学笔记 AI刷题 9.超市里的货物架调整 | 豆包MarsCode AI刷题
青训营笔记
夭要7夜宵4 个月前
分而治之,主题分片Partition | 豆包MarsCode AI刷题
青训营笔记
三六4 个月前
刷题漫漫路(二)| 豆包MarsCode AI刷题
青训营笔记