5.17华为OD机试真题 新系统 - 麻将基本胡牌型判断 (JavaPyCC++JsGo)

📅 2026/7/30 14:43:19
5.17华为OD机试真题 新系统 - 麻将基本胡牌型判断  (JavaPyCC++JsGo)
麻将基本胡牌型判断2026 华为OD机试真题 5.17华为OD上机新系统考试真题 100 分题型点击查看华为 OD 机试真题完整目录2026最新华为OD机试新系统卷 双机位C卷 真题题库目录全覆盖题库 逐点算法考点详解题目描述给定14张麻将牌只包含三种花色万用1表示、条用2表示、筒用3表示每种花色有1-9共9种点数。请判断这14张牌是否能组成基本胡牌型4个面子 1对将牌。2026 华为OD机试真题 5.17华为OD上机新系统考试真题 100 分题型胡牌规则面子可以是以下两种之一i.顺子同花色连续三张牌例如1万2万3万ii.刻子三张相同的牌例如5条5条5条将牌两张相同的牌3.胡牌条件14张牌正好组成4组面子 1组将牌输入描述第一行包含14个整数表示每张牌的花色1-3第二行包含14个整数表示每张牌的点数1-9输入保证每张牌的花色和点数对应同一副牌中可能有多张相同的牌输出描述输出一行如果能够组成基本胡牌型返回胡牌组合的数量如果不能返回0示例1输入[1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2 2, 2], [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 4]输出1说明123456789万3个顺子1234条1个顺子44条将牌总共4个顺子 1对将牌满足胡牌条件。示例2输入[1, 1, 1, 2, 2, 2, 3, 3, 3, 1, 1, 1, 2, 2], [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 5, 6, 4, 4]输出1说明111万刻子222条刻子333筒刻子456万(顺子)示例3输入[1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 1, 1, 2, 3], [1, 2, 3, 4, 2, 3, 4, 2, 3, 4, 5, 6, 7, 8]输出0说明不能胡牌解题思路本题要求判断 14 张麻将牌是否能组成“基本胡牌型”4个面子 1对将牌。牌的表示 - 共有 3 种花色每种花色 1-9 点。我们可以用一个长度为 27 的数组来统计每种牌的数量索引 $i (花色-1) \times 9 (点数-1)$。解题步骤 -统计频率首先统计输入中 14 张牌的分布。 -枚举将牌遍历 27 种牌如果某种牌的数量 $\ge 2$则可以尝试将其作为“将牌”一对。 -递归拆解面子扣除将牌后剩下 12 张牌需要拆解成 4 个“面子”顺子或刻子。使用回溯/深度优先搜索 (DFS)进行拆解。在搜索过程中优先处理序号最小的牌。尝试拆成刻子如果当前牌数量 $\ge 3$扣除 3 张继续搜索。尝试拆成顺子如果当前牌、下一张牌、下下张牌数量都 $\ge 1$且它们属于同一花色扣除 3 张继续搜索。记忆化搜索由于拆解过程中会出现重复状态使用记忆化如 Python 的lru_cache或哈希表来加速。计算结果累加所有可能的胡牌组合数量。复杂度分析时间复杂度$O(27 \times S)$其中 27 是枚举将牌的种类$S$ 是拆解 12 张牌的面子时的状态数。由于只有 12 张牌搜索空间非常小实际运行速度极快。空间复杂度$O(S)$用于存储搜索过程中的