【华为机试真题 Python实现】最多团队

本文介绍了一道华为机试真题,要求根据个人能力数组和团队最低能力值,计算最多能组成多少个符合要求的团队。题目强调了机试模式下输入输出的处理,并给出了几个示例及参考代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

《华为机试真题》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。

如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议!

本文解法非最优解(即非性能最优)。

题目描述

用数组代表每个人的能力,一个比赛活动要求参赛团队的最低能力值为N,每个团队可以由1人或2人组成,

且1个人只能参加1个团队, 请计算出最多可以派出多少支符合要求的团队?

特别提醒!!!!
注意1:机试为ACM 模式
你的代码需要处理输入输出,input接收输入、print格式化输出

注意2:机试按通过率记分
复杂题目可以考虑暴力破解,再逐步优化,不是运行超时就无法得分,如下,提交结果运行超时,但用例通过率>92.31% , 如果是100分的题目,可以得92.3分。
在这里插入图片描述

输入描述:
5
3 1 5 7 9
8
第一行数组代表总人数,

### 华为OD真题及答案解析 以下是一些典型的华为OD题目及其解析,涵盖不同类型的算法和逻辑问题。这些问题基于引用内容以及常见的考点进行整理。 --- #### 1. **TLV解析** TLV(Type-Length-Value)是一种数据编码格式,常用于网络协议中。在华为OD中,可能会要求实现TLV解析功能。 **题目描述** 给定一个字符串表示的TLV序列,解析出其中的所有字段,并输出解析结果。每个字段由Type、Length和Value三部分组成[^1]。 **代码示例** ```go package main import ( "fmt" ) func tlvParse(data []byte) [][]byte { var result [][]byte for len(data) > 0 { if len(data) < 3 { break } t := data[0] l := int(data[1]) if len(data) < 2+l { break } v := data[2 : 2+l] result = append(result, v) data = data[2+l:] } return result } func main() { data := []byte{1, 5, 'H', 'e', 'l', 'l', 'o', 2, 3, 'G', 'o', '!' } parsed := tlvParse(data) for _, v := range parsed { fmt.Println(string(v)) } } ``` --- #### 2. **最大报酬问题** 这是一个经典的动态规划问题,通常以“最大报酬”形式出现。 **题目描述** 给定一系列工作,每份工作有对应的时长和报酬。在总时长限制T内,选择一些工作使得总报酬最大化[^2]。 **代码示例** ```python def max_reward(jobs, T): dp = [0] * (T + 1) for job in jobs: time, reward = job for t in range(T, time - 1, -1): dp[t] = max(dp[t], dp[t - time] + reward) return dp[T] # 示例输入 jobs = [(2, 50), (3, 70), (4, 90)] T = 5 print(max_reward(jobs, T)) # 输出:120 ``` --- #### 3. **数大雁问题** 该问题要求统计字符串中“quack”叫声的数量。 **题目描述** 给定一个字符串,只包含字符‘q’, ‘u’, ‘a’, ‘c’, ‘k’,统计其中完整的“quack”叫声数量[^3]。 **代码示例** ```python def count_quack(s): pattern = "quack" count = [0] * 5 result = 0 for c in s: if c == 'q': if count[4] > 0: count[4] -= 1 result += 1 count[0] += 1 elif c in pattern: idx = pattern.index(c) if count[idx - 1] > 0: count[idx - 1] -= 1 count[idx] += 1 if any(count[:4]): return -1 return result # 示例输入 s = "quackquack" print(count_quack(s)) # 输出:2 ``` --- #### 4. **补种未成活胡杨** 该问题涉及数组操作和贪心算法。 **题目描述** 给定N棵胡杨树的状态,其中有M棵未成活,最多可以补种K棵胡杨树。计算最终存活的胡杨树数量[^4]。 **代码示例** ```python def resupply_resurrection_trees(N, M, deadTrees, K): deadTrees = set(deadTrees) res = N - M for i in range(1, N + 1): if i in deadTrees and K > 0: res += 1 K -= 1 return res # 示例输入 N, M, K = 5, 2, 1 deadTrees = [2, 4] print(resupply_resurrection_trees(N, M, deadTrees, K)) # 输出:4 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不太灵光的程序员

有用的话可以请博主喝杯咖啡续命

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

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

打赏作者

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

抵扣说明:

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

余额充值