华为1018秋招笔试真题解析
- 2026-11-07 12:44:18
关注我们,每周更新两到三次大厂最新笔试题解析
前言
今晚的题目只能用“难受”来形容了,全员大模拟,直接不考算法了。。。。cpp的同学基本上要拿不到什么分数了。
第一题日期模拟,py的日期库非常好用。
第二题虽然是一道图的算法,但是本质上还是以模拟为主。
第三题,题目过于抽象了。
快递代收点
有一个快递代收点,代收点会陆续收到一批批快递,代收点会将这些快递集中暂时保管。
每个快递都有手机号标识,快递的最终收件人会以手机号为凭证到该快递点拿走快递。
代收点对超过3天未取走的快递会收取保管费,每超出1天收取1块钱。
请创建合适的数据结构,管理代收点批量收取的快递,实现收件人取走自己所有快递的操作,并计算出总共需要支付的超期保管费。
解答要求
时间限制:C/C++1000ms,其他语言:2000ms 内存限制: C/C++ 256MB,其他语言: 512MB
输入
第一行为数字N,代表接下来会有N个批次的快递到达代收点。接下来的N行是快递达到的详细信息,每一行代表某一天达到代收点的快递。第一个字符串为日期,后面是当前批次的快递手机号,每一批的快递件数为M。
最后一行是到代收点取件顾客的手机号和取件日期,且一次仅有一个顾客取件,取件日期和快递到达的日期相同时当作可取件处理。
0< N<1000,0<M<100,所有手机号均为11位数字。
输入中所有出现的日期均属于2023年。
输出
收件人在给定的时间可取走的快递件数以及需要支付的超期保管费数目。
样例1
输入:
2
2023-01-01 15012345678 13812345678 13812345678 13812345678 13812345678
2023-01-02 15112345678 13912345678 13812345678 13712345678 19812345678
2023-01-05 13812345678
输出:
5 4
解释:
共两批次,13812345678的快递有5个,其中超过3天的有4个,因 此输出:54
思路与代码
使用哈希表统计每一个手机号收到快递的日期,遍历所有的目标手机号的日期,计算符合调节的快递数量和金额即可。
from collections import defaultdict
from datetime import datetime
N = int(input())
date_format = "%Y-%m-%d"
cnt = defaultdict(list)
for _ in range(N):
tmp = input().split()
date = datetime.strptime(tmp[0], date_format)
for i in range(1, len(tmp)):
cnt[tmp[i]].append(date)
date, phone = input().split()
date = datetime.strptime(date, date_format)
num = 0
money = 0
for dv_date in cnt[phone]:
if dv_date <= date:
num += 1
diff = (date-dv_date).days
if diff > 3:
money += diff-3
print(num, money)
指标计算
无线基站运维有话务统计功能,用来统计基站侧的CPU占用率、小区 用户数等指标。其中有部分指标的结果需要通过其他中间指标计算出 来,比如某个指标,标记为MT1,结果等于指标MT2和指标MT3的 和,最后对外呈现MT1的值,而MT2,MT3类型为中间指标,无需对外 呈现。且MT2,MT3仍然可能需要其他指标计算出来,即中间指标可以能依赖其他中间指标。为了简化计算,我们只考虑“+”,”-”,2种计算方式。
由于指标间的互相依赖关系,不能使用传统的算术表达式,采用一种 特别的计算表达,见输入描述及样例。
请计算第一个指标的最终结果,如果无法计算,返回-1。
解答要求
时间限制: C/C++1000ms,其他语言: 2000ms 内存限制:C/C++256MB其他语言:512MB
输入
给出的输入包含以下几种类型
第一行:数字,代表共有几个指标参与运算
第二行开始,包含以下类型
首行:数字,代表某个指标有几种计算步骤
下一行开始: 此指标的每个计算步骤列表
计算步骤结构为:
X,VALUE1,VALUE2 (VALUE2可选)
其中
X=0,代表取第VALUE1个指标的值,举例若VALUE1为1,代表这个指标依赖第二个指标的结果
X=1,代表直接取VALUE1的值,此种方式的VALUE1可能为正也可能为负
X=2代表减法,VALUE1和VALUE2分别为这个指标第几步公式生成的值
X=3,代表加法,VALUE1和VALUE2分别为这个指标第几步公式生成的值
所有运算包括中间运算用例保证可以用64位有符号数存储,总的指标个数不超过20
输出
输出第一个指标的最终计算结果。若无法计算,返回-1。
样例1
输入
2
3
0 1
1 20
2 0 1
3
1 30
1 40
3 1 0
输出:
50
解释:
2//代表有2个指标,记为指标0和指标1
3//第一个指标0有3个计算公式
01//第一个计算公式依赖另一个指标1的值
1,20//第二个计算公式直接取20
2,0,1//第三个计算公式为上2步计算出的值相减,第一步减第二
步的值,第一步的值由第二个指标1计算出结果为70,减去第二步
的值20,结果为50
3//第二个指标1有3个计算公式
1,30 //第一个计算公式直接取30
1,40//第二个计算公式直接取40
3,1,0//第三个计算公式为上2步计算出的值相加,第一步加第二
步的值,结果为70
思路与代码
模拟+dfs。
从第一个指标的最后一条指令出发去搜索,注意递归函数计算的是某一个指标的某一条指令。
from math import inf
n = int(input())
nodes = [[] for _ in range(n)]
for i in range(n):
m = int(input())
for j in range(m):
ops = [int(c) for c in input().split()]
nodes[i].append(ops)
# 以解析指令行为递归处理
# 第i个指标的 第j条指令
def dfs(i,j):
if not nodes[i]: return inf
op = nodes[i][j]
if op[0] == 0:
if op[1] >= n: return inf
return dfs(op[1],len(nodes[op[1]]) - 1)
if op[0] == 1:
return op[1]
if op[0] == 2:
return dfs(i, op[1]) - dfs(i, op[2])
return dfs(i, op[1]) + dfs(i, op[2])
ans = dfs(0, len(nodes[0]) - 1)
if ans == inf:
print(-1)
else:
print(ans)
防火墙规则匹配
iptables是Linux系统的网络访问控制模块,管理员可通过iptables配置允许从哪些来源IP或IP段访问一个Linux主机。
iptables支持设置多个规则链,每个规则链中可以包含若干条访问控制规则。当系统收到一个网络报文时,会基于系统配置的访问控制规则来决定是接受还是拒绝这个报文。
请开发一个简化版iptables,现给定一系列规则操作命令和查询命令,请依次输出其中查询命令的IP匹配结果。
规则操作命令有两种格式:
1.op chain_nameipor cidr action.op有三种:I表示insert,在对应的规则链开始处插入一条规则,A表示Append,在对应的规则链结尾处追加一条规则,D表示从chain_name对应的链中删除一条规则;action字段A表示Accept,R表示Reject
2.op chain_name1 ip_or_cidr G chain_name2.表示当配到此规则后跳转到 chain_name2继续匹配,G表示Goto。
其中ip_or_cidr字段可以是单个IPV4地址,也可以是CIDR格式的IPV4地址段。
CIDR示例: 10.1.0.8/24 表示10.1.0.0到10.1.0.255这个IP段。
对于一个CIDR a.b.c,d/n,如果一个IP地址的前n个bit与a.b.c.d的前n个bit相同,那么这个IP属于a.b.c,d/n这个IP段。
查询命令的格式:
M ip查询此IP是否被允许访问,M表示Match。输入用例保证一定有一条c0规则链,每一个M操作都从cO链开始依次对每一条规则进行匹配,输出匹配到的第一条规则的action(A或R)。如果没有匹配到任何规则,输出U(表示Unknown)。只支持通过IP查询,不支持CIDR格式。
解答要求
时间限制: C/C++1000ms,其他语言: 2000ms 内存限制:C/C++256MB其他语言:512MB
输入
第一行:一个整数N(2<=N<=100000),表示总的规则操作命令和查 询命令的总数。
接下来N行为规则操作命令或查询命令。
输出
对于每一个M操作,输出规则匹配后的action字段 (A、R或U)
样例1
输入
11
A C0 192.168.1.0/24 R
I c0 192.168.1.1 A
A c0 10.1.0.0/24 G c2
A c1 0.0.0.0/0 R
A c2 10.1.0.3 R
A C2 10.1.0.0/24 A
M 192.168.1.1
M 192.168.1.10
D c0 192.168.1.0/24 R
M 192.168.1.10
M 10.1.0.3
输出
ARUR
思路与代码
题目感觉并不明确,但是大体的思路应该也是使用哈希来处理每一个ip地址的数据。【无代码】
最后插一下我们的进阶一对一辅导啦
我们是一个针对技术岗(前后端开发、测试、测开、大数据开发)校招一对一进阶提高的工作室。我们从2020年2月份开始,迄今整整三年的时间,带领300+学员斩获1500+大厂offer,参加活动的同学人均5个中大厂offer以上,以下是我们活动内容的介绍! 万诺coding
我们主要是针对有一定基础的同学提供一对一笔试和面试辅导,针对每个同学不同的情况定制内容,包括但不限于“数据结构与算法”/“计算机基础知识”/“项目梳理”/“面试技巧”/“面试复盘”等内容。
摸底测试:如果有兴趣深入了解我们的活动,需要先参加我们的“摸底测试”(类似面试),方便我们了解你的具体情况(主要是code能力和计算机素养),定制出相应的辅导计划。同时这也是一个双向筛选的过程,如果基础过差的同学,抱歉我们可能无法辅导(基础过差的同学一对一辅导成本过高,对双方都不适合);摸底测试通过的同学,我们会定制化一个针对性的提高计划。然后你再考虑是否参加我们的活动。
承诺保offer:通过摸底测试后,我们会针对每个同学的情况给定一个“保offer”计划。然后同学可以根据自己的实际情况考虑参不参加我们的活动。
有兴趣的同学可以扫码添加我们的微信(whynotlab)