扑克牌游戏:寻找点数最小的牌
扑克牌游戏:寻找点数最小的牌
题目背景
一副标准的扑克牌有 54 张,包含大小王各一张,以及四种花色(黑桃、红桃、方块、梅花)的牌,每种花色各有 13 张,点数从 3 到 A。
题目描述
你和你的朋友正在玩一个扑克牌游戏。游戏规则如下:
- 游戏使用一副除去大小王的 52 张扑克牌。* 每种花色的点数大小顺序为:3,4,5,6,7,8,9,10,J,Q,K,A,2。* 游戏中只允许打出以下五种牌型: * 单张: 一张牌,例如 'SX'。 * 对子: 两张点数相同的牌,例如 'S3,H3'。 * 同花顺: 三张及以上花色相同且点数连续的牌,特别的,2 不能被用于同花顺,例如 'CJ, CQ, CK, CA'。 * 普通顺子: 五张及以上点数连续且不是同花顺的牌,特别的,2 不能被用于顺子,例如 'H3, S4, H5, H6, H7'。 * 三带一: 三张点数相同的牌带一张其它点数的牌,例如 'D4, S4, H4, S2'。* 每套牌的点数计算方式如下: * 非三带一牌型:所有牌的点数之和。例如,同花顺 'C9, CX, CJ' 的点数是 9+10+11=30。 * 三带一牌型:三张点数相同的牌的点数。例如,三带一 'D3, S3, H3, S5' 的点数是 3。
现在,你的朋友打出了一套牌,你需要从你的手牌中找到一套点数最小且符合以下条件的牌:
- 牌型与朋友打出的牌型相同。2. 牌的张数与朋友打出的牌的张数相同。3. 点数大于朋友打出的牌的点数。
如果你的手牌中找不到符合条件的牌,则输出 '-1' 表示无解。
输入格式:
- 第一行:一个整数 n,表示你的手牌数量。* 第二行:n 个长度为 2 的字符串,每个字符串表示你的一张手牌,格式为 'SH',其中 S 表示花色('S' 表示黑桃,'H' 表示红桃,'D' 表示方块,'C' 表示梅花),H 表示点数('3' 到 '9', 'X', 'J', 'Q', 'K', 'A', '2')。* 第三行:一个整数 m,表示你朋友打出的手牌数量。* 第四行:m 个长度为 2 的字符串,每个字符串表示你朋友打出的一张牌,格式与你的手牌相同。
输出格式:
- 一行:如果存在符合条件的牌,输出 m 个用单个空格隔开的长度为 2 的字符串,表示你找到的牌;否则输出 '-1'。
示例:
**输入:4HX S2 S3 DX3S4 H4 D4输出:**S3 S2 DX H3
**输入:5S4 S5 S6 S7 S83H9 H10 HJ输出:**S9 S4 S5 DX
解题思路
解决这个问题的关键在于理解不同牌型的组合规则以及如何比较牌的大小。你需要设计一个算法,能够:
- 识别牌型: 识别你的手牌和你朋友打出的牌的牌型。2. 比较牌的大小: 在相同牌型下,比较两套牌的点数大小。3. 寻找最小点数的牌: 在你的手牌中找到符合条件且点数最小的牌。
你可以使用编程语言如 Python、Java 或 C++ 来实现该算法。
测试样例
除了上述示例,我们还提供更多测试样例,帮助你测试你的算法:
**样例三:****输入:6S3 S4 S5 S6 S7 S84C8 C9 CJ CK输出:**S9 S4 S5 DX
**样例四:****输入:4S3 S3 S3 S43H5 H6 H7输出:**S5 S3 S3 DX
**样例五:****输入:5S3 S3 S3 S4 S44H5 H6 H7输出:**S5 S3 S3 DX
**样例六:****输入:7S3 S3 S4 S4 S5 S5 S63H7 H8 H9输出:**S7 S3 S4 DX
**样例七:****输入:5S4 S4 S5 S6 S63H7 H8 H9输出:**S7 S4 S5 DX
**样例八:****输入:6S3 S4 S5 S6 S7 S83H3 H4 H5输出:**DX S3 S4
**样例九:****输入:6S3 S3 S4 S4 S5 S53H4 H5 H6输出:**S6 S3 S4 DX
**样例十:****输入:5S3 S3 S4 S4 S53H5 H6 H7输出:**S6 S4 S4 DX
原文地址: https://www.cveoy.top/t/topic/17E 著作权归作者所有。请勿转载和采集!