最新华为OD机试
真题目录:点击查看目录
华为OD面试真题精选:点击立即查看
2025华为od 机试2025B卷-华为机考OD2025年B卷
题目描述
斗地主起源于湖北十堰房县,据说是一位叫吴修全的年轻人根据当地流行的扑克玩法“跑得快”改编的,如今已风靡整个中国,并流行于互联网上。
牌型:单顺,又称顺子,最少5张牌,最多12张牌(3…A)不能有2,也不能有大小王,不计花色。
例如: 3-4-5-6-7-8,7-8-9-10-J-Q,3-4-5-6-7-8-9-10-J-Q-K-A
可用的牌 3<4<5<6<7<8<9<10<J<Q<K<A<2<B(小王)<C(大王),每种牌除大小王外有四种花色
(共有13×4+2张牌)
输入:
- 手上有的牌
- 已经出过的牌(包括对手出的和自己出的牌)
输出:
- 对手可能构成的最长的顺子(如果有相同长度的顺子,输出牌面最大的那一个),
- 如果无法构成顺子,则输出 NO-CHAIN。
输入描述
输入的第一行为当前手中的牌
输入的第二行为已经出过的牌
输出描述
示例1
输入
3-3-3-3-4-4-5-5-6-7-8-9-10-J-Q-K-A
4-5-6-7-8-8-8
输出
9-10-J-Q-K-A
说明
无
示例2
输入
3-3-3-3-8-8-8-8
K-K-K-K
输出
NO-CHAIN
说明
剩余的牌无法构成顺子
解题思路
✅ 题目目标
判断对手可能凑成的最长顺子(最少5张,最大12张,仅限3~A),输出最大牌面值的最长顺子;若不存在,输出 NO-CHAIN
。
🧠 整体思路分为 4 步:
1. 构建完整牌库与合法顺子牌面
- 所有牌共 15 种(3~A,2,B,C),其中顺子仅允许从 “3” 到 “A” 共 12 种。
- 每种牌的张数:3~A 为 4 张,2 为 4 张,B/C 各 1 张。
2. 统计对手可能拥有的牌数
通过以下公式得出对手每种牌的剩余量:
对手牌数 = 总张数 - 自己手上张数 - 出过的张数
3. 在 3~A 中滑窗查找顺子
- 枚举每个长度 ≥5 的连续牌段,窗口从
i
到j
(j-i+1 ≥ 5
) - 检查对手是否在这个段中每种牌至少还有一张,若满足条件,视为对手可能打出该顺子。
4. 记录并更新最优解
- 记录满足条件的最长顺子;<