5-【软件雏鹰计划-Java版】第五期编程题目练习题解
简易 DHCP 服务器
题目
DHCP服务器的功能是为每一个MAC地址分配唯一的IP地址。现假设:分配的IP地址范围从 192.168.0.0 到 192.168.0.255 总共256个可用地址(以点分十进制表示)。请实现一个简易的DHCP服务器,功能如下:
- 分配Request:根据输入的MAC地址分配IP地址池中的IP地址:
- 如果对应的IP已分配并未释放,则为重复申请,直接返回对应已分配的IP地址。
- 如果一个MAC地址已申请过并已释放,即:当前未分配IP地址,则为再申请,优先分配最近一次曾经为其分配过的IP地址,请返回此地址。
- 按升序分配从未被分配过的IP地址;如果地址池中地址都已被分配过,则按升序分配已释放出来的IP地址;若可分配成功,则返回此IP地址。
- 若仍然无法分配成功,则返回
NA
。
- 释放Release:根据输入的MAC地址释放已分配的IP地址:
- 如果申请释放的对应的IP地址已分配,则释放此IP地址;
- 如果申请释放的对应的IP地址不存在,则不作任何事情;
时间限制: C/C++ 1000ms, 其他语言:2000ms
内存限制: C/C++ 256MB, 其他语言:512MB
输入
首行为整数n, 表示其后输入的命令行数,范围[1,2000]。
之后每行为一条分配命令,格式为:命令=MAC地址
- 命令只有两种:
REQUEST
和RELEASE
,分别表示分配和释放; - MAC地址为:12个大写英文字母或数字,如:
AABBCCDDEEF1
。
输出
- REQUEST命令,输出分配结果(IP地址字符串或字符串NA),均为字符串形式。
注意:IP地址的各区段不设置前置 0
- RELEASE命令,不输出任何内容。
样例1
1 | 输入: |
样例2
1 | 输入: |
对着题干模拟就好了
1 | static class DhcpServer { |
代码缩进
题目
缩进**的代码,通过多次操作,最终实现对每一行的缩进长度要求。
一次操作指:
- 一次操作是缩进一个TAB长度(如样例1图所示)。注:这里缩进仅指从左往右,不能回退。
- 一次操作可选择一行或连续多行同时缩进。
现给出一段代码的每行缩进长度要求,用一个数字序列表示,请计算至少需要多少次操作才能实现。
时间限制: C/C++ 1000ms, 其他语言:2000ms
内存限制: C/C++ 256MB, 其他语言:512MB
输入
一个整数 n ,表示代码总行数,取值范围:[1, 65535]。
接下来一行有 n 个整数,依次表示第 1~n 行的最终缩进长度要求,取值范围:[0, 1000000]。
输出
一个整数,表示所需的最少操作次数。
样例1
1 | 输入: |
样例2
1 | 输入: |
代码缩进时只有向内缩进才需要操作,而向外回退则不需要操作,简单来说,1 2 1这个序列,在从1层缩进前进到2层缩进需要进行一步操作,此时已经操作完毕,2层回到1层不需要额外的操作
因此直接遍历steps,当当前指针比上一个数大(需要缩进)时,结果加上两个数字的差;当当前指针比上一个数小则不进行任何操作。
最后输出结果即可
1 | static int getMinStep(int[] steps) { |
四则运算求值
题目
用eval()直接逃课了(
1 | private static String calculate(String expression) { |
Comments