华为OD机考双机位A卷 - 最长的顺子(Java & Python& JS & C/C++ & GO )

最新华为上机考试

真题目录:点击查看目录
华为OD面试真题精选:点击立即查看
2025华为od机试双机位A卷 -华为OD上机考试双机位A卷

题目描述

斗地主起源于湖北十堰房县,据说是一位叫吴修全的年轻人根据当地流行的扑克玩法“跑得快”改编的,如今已风靡整个中国,并流行于互联网上。

牌型:单顺,又称顺子,最少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张牌)

输入:

  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. 记录并更新最优解

  • 记录满足条件的最长顺子;
  • 若多个顺子长度一样,则选择末尾牌面更大
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值