2023 饿了么笔试题 0909
笔试时间:2023年9月9日 秋招
第一题
题目:小红的棋盘
小红有一个大小为8x8的国际象棋棋盘,棋盘的(x1,y1)位置上是骑士,可以向八个方向移动,棋盘的(x2,y2)位置上是主教,可以向四个方向移动,但是不能越过其他棋子。小红想知道,有多少个地方可以放一个新棋子,不会被骑士和主教吃掉。新棋子只能放置在空的格子上。骑士位置在(x1,y1),那么会吃掉(x1+dx,y1+dy)的棋子,|dx|+|dy|=3,dx≠0,dy≠0。主教位置在(x2,y2),那么会吃掉(x2+dx,y2+dy)的棋子,|dx|= |dy| >0。
输入描述
一行四个整数x1,y1,x2,y2,表示骑士和主教的位置。
1<=x1,y1,x2,y2<=8(x1,y1)≠(x2,y2)
输出描述
输出一个整数,表示可以放置新棋子的位置数。
样例输入
1 2 4 5
样例输出
47
参考题解
直接模拟即可,判断每个骑士和国王可以走到的点,统计没有标记的点。
Python:[此代码未进行大量数据的测试,仅供参考]
def optimize_code(): x1, y1, x2, y2 = [int(c) - 1 for c in input().split()] bans = [[False] * 8 for _ in range(8)] bans[x1][y1] = True bans[x2][y2] = True def check_boundary(nx, ny): return nx < 0 or ny < 0 or nx >= 8 or ny >= 8 def check_diagonal_collision(x, y, dx, dy): nx, ny = x + dx, y + dy while not check_boundary(nx, ny) and (nx, ny) != (x1, y1): bans[nx][ny] = True nx += dx ny += dy # Check horizontal and vertical positions for dx, dy in ((1, 0), (-1, 0), (0, 1), (0, -1)): nx, ny = x1 + dx, y1 + dy if not check_boundary(nx, ny): bans[nx][ny] = True # Check diagonal positions: top left, top right, bottom left, bottom right for dx, dy in ((-1, -1), (-1, 1), (1, 1), (1, -1)): check_diagonal_collision(x2, y2, dx, dy) res = sum(not bans[i][j] for i in range(8) for j in range(8)) return res print(optimize_code())
第二题
题目:小红的城堡
一天小红来到了一个古老的王国,这个王国由n个城堡组成,这其中有一个城堡是国王的皇宫,编号为 1,城堡之间用n-1条道路相连,形成一张连通的图。然而,不幸的是,有m个城堡的供水系统出现了问题,导致这些城堡的居民没有水源供应。小红决定自愿修复这些城堡的供水系统,以保障居民的生活质量。每次修复,小红可以
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2023 秋招笔试题汇总解析 文章被收录于专栏
2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。