华为OD机考2025B卷 - 最长的顺子(Java & Python& JS & C++ & C )

最新华为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

(共有13×4+2张牌)

输入:

  1. 手上有的牌
  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 的连续牌段,窗口从 ijj-i+1 ≥ 5
  • 检查对手是否在这个段中每种牌至少还有一张,若满足条件,视为对手可能打出该顺子。

4.

你可能感兴趣的:(最新华为OD机试真题,华为OD机试真题,(Java/JS/Py/C),java,华为od,python,华为OD机考2025B卷,javascript,c++)