西山居校招笔试编程题
题 1
1 | import java.util.Scanner; |
题 2
题目描述
现有一个由 0(海洋)、1(陆地)、2(有敌军的陆地)构成的二维网格,请计算没有敌军驻扎的岛屿数量。岛屿总是被水包围,每座岛屿只能由水平方向或垂直方向上相邻的陆地连接而成。二维网格的四条边均被水包围。
函数定义:
- 输入:一个二维数组
grid,表示地图。 - 输出:返回没有敌军驻扎的岛屿数量。
规则:
- 数组中的
0代表海洋,1代表没有敌军的陆地,2代表有敌军的陆地。 - 只能统计没有敌军的岛屿,数值为
1的连续区域构成的岛屿。 - 数组没有覆盖到的地方认为是海水。
示例
示例 1:
输入:
1 | [ |
输出:`3```
解释:输入二维数组,计算出没有敌军岛屿数量,数组没有覆盖到的地方认为是海水。
示例 2:
输入:
1 | [ |
输出:`1```
解释:计算二维数组中没有敌军的岛屿数量,敌军驻扎的地方(值为 2)不能计入岛屿。
思路分析
- 可以使用 深度优先搜索(DFS) 或 广度优先搜索(BFS) 来查找岛屿的数量。
- 每当遇到
1时,启动 DFS 或 BFS,递归遍历所有与之相邻的1,并标记为已经访问过,统计岛屿的个数。
1 | public class IslandCounter { |
题 3
题目描述
实现一个简单的网络协议编解码器,从标准输入中得到模拟的网络字节流,对其进行解码并输出解析后的内容。协议规范如下:
- 字节流前两字节为常量,我们设置为 “SS”。
- 接下来的 2 个字节为协议的长度(unsigned short)。
- 接着是 2 个字节为协议号(unsigned short)。
- 最后为消息体的长度。为了便于输出,这里我们使用的是不带结束符的字符串表示消息体。
例子:
如图所示:
- 字节流的前两个字节为常量,我们设置为“SS”。
- 接下来的 2 个字节为协议的长度(unsigned short)。
- 接着是 2 个字节为协议号(unsigned short)。
- 最后为消息体的长度。为了便于输出,我们这里使用的是不带结束符的字符串表示消息体。
示例
输入示例:
16 进制表示的字节流,16 进制的字母使用小写表示,如:
1 | 53530e00420048656c6c6f2053656153756e |
输出示例:
解码后的消息体内容,输出协议号和消息体,协议号和消息体用空格隔开,如上所示的例子输出为:
1 | 66 Hello SeaSun |
解析:
- 输入字节流:
53530e00420048656c6c6f2053656153756e- 前 2 字节:
5353(常量 “SS”) - 长度:
0e00(协议总长度 14) - 协议号:
4200(协议号为 66) - 消息体:
Hello SeaSun
- 前 2 字节:
示例
输入示例:
16 进制表示的字节流,16 进制的字母使用小写表示,如:
1 | 53530e00420048656c6c6f2053656153756e53531300580057656c636f6d6520746f205a6875486169 |
输出示例:
解码后的消息体内容,输出协议号和消息体,协议号和消息体用空格隔开,如上所示的例子输出为:
1 | 66 Hello SeaSun |
示例
输入示例:
16 进制表示的字节流,16 进制的字母使用小写表示,如:
1 | 53530e00420048656c6c6f2053656153756e53531300580057656c636f6d6520746f205a687548616953530b007b00476f6f64206c75636b53530f00 |
输出示例:
解码后的消息体内容,输出协议号和消息体,协议号和消息体用空格隔开,如上所示的例子输出为:
1 | 66 Hello SeaSun |
1 | import java.util.*; |
- 标题: 西山居校招笔试编程题
- 作者: moye
- 创建于 : 2024-10-13 11:46:13
- 更新于 : 2025-12-11 14:39:48
- 链接: https://www.kanes.top/2024/10/13/西山居校招笔试编程题/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论