华为软件类笔试-嵌入式软件开发 10-18
《嵌入式软件开发笔试与面试手册》:https://blog.nowcoder.net/zhuanlan/jvN8gj
《软件开发笔试汇总》:https://blog.nowcoder.net/zhuanlan/0oDWVm
第三题:防火墙规则匹配
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
第一题:快递代收点
有一个快递代收点,代收点会陆续收到一批批快递,代收点会将这些快递集中暂时保管。
每个快递都有手机号标识,快递的最终收件人会以手机号为凭证到该快递点拿走快递。
代收点对超过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
输出:
5 4
解释:
共两批次,的快递有5个,其中超过3天的有4个,因此输出:5 4
#include <iostream> #include <string> #include <map> #include <vector> #include <chrono> #include <sstream> tm parse_date(const std::string &s) { std::istringstream ss(s); tm tm_date = {}; char discard; ss >> tm_date.tm_year >> discard >> tm_date.tm_mon >> discard >> tm_date.tm_mday; tm_date.tm_year -= 1900; tm_date.tm_mon -= 1; return tm_date; } int main() { using namespace std; using namespace std::chrono; int N; cin >> N; cin.ignore(); map<string, vector<system_clock::time_point>> cnt; for (int i = 0; i < N; ++i) { string
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏主要发布嵌入式软件开发相关岗位2023年(2024届)的笔试真题(嵌入式软件开发、通用软件开发、C/C++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。