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多种语言分析,解答。

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-24 13:40
点赞 评论 收藏
分享
仁者伍敌:牛子这些人还会点一个自动回复,boss都不带回复的
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务