记录一下在刷题过程中给我印象较深的一道题。
问题描述
在一场经典的德州扑克游戏中,有一种牌型叫做“葫芦”。“葫芦”由五张牌组成,其中包括三张相同牌面值的牌 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。
- 找到出现次数≥3的牌值,作为候选的
-
遍历所有可能的组合:
- 从候选
a和候选b中进行组合,排除a和b重复的情况。 - 计算牌面值总和,排除总和超过
max的组合。
- 从候选
-
比较大小,找到最大组合:
- 按照规则,优先选择
a最大的组合;若a相同,则选择b最大的组合。
- 按照规则,优先选择
-
输出结果:
- 如果找到符合条件的组合,输出最大组合中的
a和b。 - 否则,输出
0, 0
- 如果找到符合条件的组合,输出最大组合中的
与MarsCodeAI交互的经历与个人想法:
一开始做这道题目时直接踩坑。就是对于牌A而言,他比大小时是最大的,但是计算时却又按1算,所以在构建哈希表时,应该建立两次映射,一个是比大小的,一个是计算牌面值的。我第一次做的时候忘记了,只构建了一次映射,凑巧下面的测试用例没问题,但是提交一直有问题,一度怀疑题目有问题。 所以我就问AI,让它帮我找错误。印象特别清晰,由于提交失败,所以它说我的代码有问题,分析了很多但是最后给出的代码和我原版代码一模一样,没有任何修改。后面我在群友的提醒下意识到了问题,自己重新写了代码,并且提醒了AI需要构建两次映射,它才修改正确。 从这个题的情况来看,当前的AI还是有一些问题的,尤其在判别错误时更多的还是需要人来指导,去给一些思路提示。其实这样本无可厚非,但是如果作为配合刷题学习的AI来说,这个短板容易误导初学者,降低学习效率。所以希望后续可以加强AI本身判误的能力。当然它也有很多的优点。比如如果我一开始没让它判误时,直接让它给出正确答案,它的整体思路非常清晰正确,且结果也没有问题,说明它在解决问题方面没有什么问题。