华为OD机试 - 芯片资源限制(Java 2024 C卷 100分)

本文介绍了华为OD机试中关于芯片资源限制的Java编程题目,涉及芯片容量、业务配置规则以及如何保证使用最少芯片资源。通过具体输入输出示例,解释了业务配置过程,并提供了算法源码。

一、题目描述

一个业务芯片的容量为10G,可支持两种不同的业务类型A、B。芯片的约束如下:

1.A业务容量为2.5G,一个芯片上最多可配置4路业务;
2.B业务容量为10G,一个芯片上最多可配置1路业务;
3.由于业务容量限制,配置了A业务后,该芯片就不能配置B业务;
4.不能跨芯片占用资源,即业务只能配置在一块芯片上,不能占用一块芯片的容量,再占用另外芯片容量;
5.为了保证使用最少的芯片资源,业务配置时,按芯片编号从小到大顺序依次配置,并优先使用已经占用的芯片。
由于业务容量最小为2.5G,以最小业务容量为单位,一个芯片可以划分为4个资源区,将资源区依次编号为1,2,3,4。

一块板卡上有M块芯片,用户进行一系列业务配置后,请输出最后一个业务对应的芯片编号和芯片资源D,如果没有可用资源返回0 0

二、输入描述

板卡芯片数量M,芯片范围为1-32
用户业务配置数量N,数量为1-128
用户业务配置,业务配置间以空格分割

三、输出描述

芯片编号 资源区编号

四、测试用例

1、输入

3
4
B A B A

2、输出

2
2

3、说明

B分配到芯片1,资源1
A分配到芯片2,资源1
B分配到芯片3,资源1<

华为OD中处理器问题有相关示例题目及一定的解题思路。示例题目为某公司研发了一款高性能AI处理器,每台物理设备具备8颗AI处理器,编号别为0、1、2、3、4、5、6、7。编号0 - 3的处理器处于同一个链路中,编号4 - 7的处理器处于另外一个链路中,不同链路中的处理器不能通信。现给定服务器可用的处理器编号数组array,以及任务申请的处理器数量num,找出符合亲和性调度原则的芯片组合。如果不存在符合要求的组合,则返回空列表。亲和性调度原则如下: - 若申请处理器个数为1,则选择同一链路,剩余可用的处理器数量为1个的最佳,其次是剩余3个的为次佳,然后是剩余2个,最后是剩余4个。 - 若申请处理器个数为2,则选择同一链路剩余可用的处理器数量2个的为最佳,其次是剩余4个,最后是剩余3个。 - 若申请处理器个数为4,则必须选择同一链路剩余可用的处理器数量为4个。 - 若申请处理器个数为8,则申请节点所有8个处理器。 提示任务申请的处理器数量只能是1、2、4、8,处理器编号唯一,且不存在相同编号处理器 [^3]。 关于解题思路,《华为OD2025A全解析》持续更新版包含真题类、代码模板、解题策略等内容。真题类按算法类型划高频考点(动态规划/字符串处理/图论等);代码模板提供Python/Java/C++/Js/c五语言实现,含详细注释与测用例;解题策略方面每道题包含「思路图解 + 复杂度析 + 同类题变形建议」 [^2]。 另外,订阅华为OD真题专栏后,专栏内文章都可看且会继续更新新题,每道题包含题目、解题思路、代码详解(关键行包含详细注释)、代码运行截图(保证代码100%正确,通过率100%) [^1]。 以下为Python示例代码: ```python def find_chip_combinations(array, num): link1 = [i for i in array if 0 <= i <= 3] link2 = [i for i in array if 4 <= i <= 7] if num == 1: if len(link1) == 2: return [link1[0]] if link1 else [] elif len(link2) == 2: return [link2[0]] if link2 else [] elif len(link1) == 4: return [link1[0]] if link1 else [] elif len(link2) == 4: return [link2[0]] if link2 else [] elif len(link1) == 3: return [link1[0]] if link1 else [] elif len(link2) == 3: return [link2[0]] if link2 else [] elif len(link1) == 5: return [link1[0]] if link1 else [] elif len(link2) == 5: return [link2[0]] if link2 else [] elif num == 2: if len(link1) == 4: return link1[:2] if len(link1) >= 2 else [] elif len(link2) == 4: return link2[:2] if len(link2) >= 2 else [] elif len(link1) == 6: return link1[:2] if len(link1) >= 2 else [] elif len(link2) == 6: return link2[:2] if len(link2) >= 2 else [] elif len(link1) == 5: return link1[:2] if len(link1) >= 2 else [] elif len(link2) == 5: return link2[:2] if len(link2) >= 2 else [] elif num == 4: if len(link1) == 8: return link1 elif len(link2) == 8: return link2 elif num == 8: if len(link1) == 4 and len(link2) == 4: return link1 + link2 return [] # 示例调用 array = [0, 1, 2, 3, 4, 5, 6, 7] num = 1 result = find_chip_combinations(array, num) print(result) ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

哪 吒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值