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

176 阅读3分钟

记录一下在刷题过程中给我印象较深的一道题。

问题描述

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

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

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

解法思路:

这道题是个简单题,本身思路不难。大概思路如下:

  • 统计牌面值的频率

    • 使用哈希表或 collections.Counter 来统计每种牌面值出现的次数。
  • 筛选符合条件的牌型

    • 找到出现次数≥3的牌值,作为候选的 a
    • 找到出现次数≥2的牌值,作为候选的 b
  • 遍历所有可能的组合

    • 从候选 a 和候选 b 中进行组合,排除 a 和 b 重复的情况。
    • 计算牌面值总和,排除总和超过 max 的组合。
  • 比较大小,找到最大组合

    • 按照规则,优先选择 a 最大的组合;若 a 相同,则选择 b 最大的组合。
  • 输出结果

    • 如果找到符合条件的组合,输出最大组合中的 a 和 b
    • 否则,输出 0, 0

与MarsCodeAI交互的经历与个人想法:

一开始做这道题目时直接踩坑。就是对于牌A而言,他比大小时是最大的,但是计算时却又按1算,所以在构建哈希表时,应该建立两次映射,一个是比大小的,一个是计算牌面值的。我第一次做的时候忘记了,只构建了一次映射,凑巧下面的测试用例没问题,但是提交一直有问题,一度怀疑题目有问题。 所以我就问AI,让它帮我找错误。印象特别清晰,由于提交失败,所以它说我的代码有问题,分析了很多但是最后给出的代码和我原版代码一模一样,没有任何修改。后面我在群友的提醒下意识到了问题,自己重新写了代码,并且提醒了AI需要构建两次映射,它才修改正确。 从这个题的情况来看,当前的AI还是有一些问题的,尤其在判别错误时更多的还是需要人来指导,去给一些思路提示。其实这样本无可厚非,但是如果作为配合刷题学习的AI来说,这个短板容易误导初学者,降低学习效率。所以希望后续可以加强AI本身判误的能力。当然它也有很多的优点。比如如果我一开始没让它判误时,直接让它给出正确答案,它的整体思路非常清晰正确,且结果也没有问题,说明它在解决问题方面没有什么问题。