PDD 2021届提前批 算法工程师笔试
文章首发于公众号“面鲸”,更多大厂笔试面试题解欢迎关注。添加小编微信可获取python题解哦
第一题
题目描述
-
对于一个n阶矩阵,首先用米字形把矩阵等分成8个区域,然后从左上角开始,按逆时针顺序给各自区域编号为1,2,…,8。如图所示
-
同时矩阵元素需要满足
- 各区域内的元素都等于区域的编号
- 被分割线穿过的元素值都等于0
输入描述
- 一个数字n,表示矩阵的阶数(3<n<200)
输出描述
- 输出n行,每行n个数,用空格隔开。表示打印出的矩阵。
样例输入
- 4
样例输出
- 0 2 1 0
- 3 0 0 8
- 4 0 0 7
- 0 5 6 0
解析
- 观察这个“米”字型,能够分为10种情况:8个区域+两条对角线。找每个区域的坐标的特点即可。
第二题
题目描述
- 多多在玩一个叫做《野蛮》的回合策略游戏。在这个游戏中,地图可以视为一个N*M的矩形,划分为N*M个小正方形的格子。一个格子的上、下、左、右四个格子视为与该格子相邻。
- 玩家可以自爱每个格子上布置一个士兵。并且每个士兵可以和相邻的士兵归为同一个队伍。在这个游戏中,同一个队伍的士兵数量越多,就越强大。多多现在有一个道具可以移动任意一个格子上的士兵到任意一个格子中。求移动后可得到的最大队伍士兵数。
输入描述
- 第一行输入两个整数N, M(1<=N, M<=400),分别代表格子的行数和列数
- 接下来有N行,每行有M个数字(以空格隔开),数字为0或1,代表每个格子里的士兵数量。
输出描述
- 输出一行表示一个整数,表示可得到的最大队伍士兵数。
样例输入
- 4 4
- 1 0 1 1
- 1 1 0 1
- 0 0 0 0
- 1 1 1 1
样例输出
- 8
说明
- 一种最优的移动方法
- 1 0 1 1
- 1 1 0 0
- 1 0 0 0
- 1 1 1 1
解析
- 首先可以通过DFS求出每一个队伍中士兵的个数;然后枚举要新放士兵的位置(i, j),判断位置(i, j)放一个士兵后可否将不同的队伍联通。注意考虑边界的情况~
- c++代码:https://paste.ubuntu.com/p/hww9qCxG6C/
- python代码:公众号后台回复“联系”添加小编微信即可获取~