华为OD机试 - 德州扑克 - 逻辑分析(Python/JS/C/C++ 2025 C卷 200分)

一、题目描述

五张牌,每张牌由牌大小和花色组成,牌大小2~10、J、Q、K、A,牌花色为红桃、黑桃、梅花、方块四种花色之一

1、判断牌型

牌型1,同花顺:同一花色的顺子,如红桃2红桃3红桃4红桃5红桃6。

牌型2,四条:四张相同数字+单张,如红桃A黑桃A梅花A方块A+黑桃K.

牌型3,葫芦:三张相同数字+一对,如红桃5黑桃5梅花5+方块9梅花9。

牌型4,同花:同一花色,如方块3方块7方块10方块J方块Q.

牌型5,顺子:花色不一样的顺子,如红桃2黑桃3红桃4红桃5方块6。

牌型6,三条:三张相同+两张单。

2、说明

  1. 五张牌里不会出现牌大小和花色完全相同的牌;
  2. 编号小的牌型较大,如同花顺比四条大,依次类推;
  3. 包含A的合法的顺子只有10JQKA和A2345;类似KA23的序列不认为是顺子。

二、输入描述

输入由5行组成,每行为一张牌大小和花色,牌大小为2~10、J、Q、K、A,花色分别用字符H、S、C、D表示红桃、黑桃、梅花、方块。

三、输出描述

输出牌型序号,5张牌符合多种牌型时,取最大的牌型序号输出。

四、测试用例

测试用例1

1、输入

### 华为实习题目及相关练习 对于希望参加华为实习并准备其的同学来说,了解常见的题目及其解题方法至关重要。以下是关于华为OD的一些高频手撕代码题以及对应的解决思路[^2]。 #### 常见的华为OD题目类 以下是一些典型的华为OD题列表: 1. **九宫格全排列** - 使用回溯法实现所有可能的排列组合。 - 提供多种语言版本(C、C++Python、Java、JavaScript)解决方案[^4]。 2. **扑克牌消除逻辑** - 设计一种算法来模拟扑克游戏中的消除过程。 - 关键在于如何高效地匹配和移除符合条件的牌组。 3. **配资源ID逻辑+集合** - 解决方案涉及集合操作与冲突检测。 - 可以通过哈希表优化查找速度。 4. **批量初始化次数排序** - 排序问题是基础但重要的一环。 - 考虑稳定性与时效性的平衡。 5. **云上故障逃生优先队列 (Dijkstra 算法)** - 应用经典的 Dijkstra 最短路径算法求解最优逃生路线。 - 特别注意图结构的设计与权重赋值。 6. **购物系统的降级策略 ()** - 当系统负载过高时,采用二查找快速定位可降级的服务模块。 - 此类问题通常考察数据结构的理解能力。 7. **服务器消耗统计区间问题** - 利用滑动窗口技术处理连续区间的动态变化。 - 时间复杂度需尽可能低。 8. **计算云服务 DI 值 (哈希表)** - 构建高效的哈希映射存储量离散数值。 - 并发访问场景下的线程安全也是考量因素之一。 9. **树上逃离 (图:深度优先)** - 将整棵树视为无向连通图,并对其进行层次划- 结合广度优先搜索(BFS),找到最短时间内抵达目标节点的方法[^5]。 #### 示例代码片段 下面提供一道典型题目——`树上逃离`的具体实现方式作为参考: ```cpp #include <iostream> #include <queue> #include <vector> using namespace std; struct Node { int id; vector<int> neighbors; }; int bfsEscapeTime(vector<Node>& graph, int start, int princess) { queue<pair<int, int>> q; // {currentNode, time} vector<bool> visited(graph.size(), false); q.push({start, 0}); visited[start] = true; while (!q.empty()) { auto [nodeId, currentTime] = q.front(); q.pop(); if (nodeId == princess) return currentTime; for(auto neighbor : graph[nodeId].neighbors){ if(!visited[neighbor]){ visited[neighbor]=true; q.push({neighbor,currentTime+1}); } } } return -1; // If unreachable } // Example usage: /* graph[0].id=0; graph[0].neighbors={1}; graph[1].id=1; graph[1].neighbors={0,2}; graph[2].id=2; graph[2].neighbors={1,3}; graph[3].id=3; graph[3].neighbors={2};*/ ``` 此段代码展示了基于BFS算法寻找从起点到终点所需最少步数的过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

哪 吒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值