美团笔试题_20220409

2023-05-16

前言

笔试一共五道编程题(四+一),一为专项编程题,估计不同岗位有题目不一样,使用的是赛码网,允许跳出界面使用自己的IDE。

在此感谢筱羊冰冰提供的部分题目及题解。

题目一:数圈游戏

给定一个整数n,计算该整数含有的圆圈个数。数字0-9对应的圈数如下:
0: 1
1: 0
2: 0
3: 0
4: 0
5: 0
6: 1
7: 0
8: 2
9: 1

输入:
第一行为一个整数n,表示数圈游戏的数字。

输入示例:
60498
输出示例:
5

限制:
80%的测试用例:n<=10000
100%的测试用例:n<=100000000

思路:

该题较为简单,一次遍历累加即可。

题目二:士兵排队

给定一定数量的士兵,将士兵按照身高从小到大排列,身高相同者按照姓名的字典序从小到大排列。

输入:
第一行为一个整数n,表示士兵的数量。
第二行为n个士兵的身高,单位为cm。
第三行为n个士兵的姓名。

输入示例:
4
176 170 176 176
bamma tom alpha beta

输出示例:
tom alpha bamma beta

限制:
士兵身高 hi <= 300
士兵姓名长度 ni <= 20

思路一:

将每一个人的身高和名字按照 (身高,名字) 的格式存储,然后进行两次排序,先按照身高排序,再按照名字排序即可。(利用了python排序算法的稳定性!)

n = int(input())
heights = list(map(str, input().split()))
names = list(map(str, input().split()))
ls = []
for i in range(n):
    ls.append((heights[i], names[i]))
# lambda函数指定排序规则
ls.sort(key=lambda x:x[1])
ls.sort(key=lambda x:x[0])
for i in range(n):
    print(ls[i][1], end=' ')

思路二:

因为身高的限制为 hi <= 300,所以身高最高只能为三位数,那么我们可以把所有身高都通过补前置零的方式化为三位数,然后再与名字拼接成一个字符串,这样只需要一次排序就能够得出结果。

n = int(input())
heights = list(map(str, input().split()))
names = list(map(str, input().split()))
for i in range(n):
	# str.zfill()自动填充
    heights[i] = heights[i].zfill(3) + names[i]
heights.sort()
for i in range(n):
    print(heights[i][3:], end=' ')

题目三:路径搜索

给定一个地图,询问是否存在一条从起点到终点的直接通路。注意,通路是双向的。

输入:
第一行包括两个整数n和m,分别表示地图上点的数量和通路的数量。
第二行包括m个整数,表示地图上通路的一端。
第三行包括m个整数,表示地图上通路的另一端。
第四行包括k个整数,表示询问的次数。
接下来的k行每行包括两个整数,分别表示起点和终点。

输入示例:
4 5
1 2 1 3 1
2 3 3 4 4
4
1 3
2 4
2 1
3 2

输出示例:
Yes
No
Yes
Yes

思路:

筱羊冰冰:上来就看错了,然后花了好久写了类似并查集的东西,然后用不上……
(果然大佬就是不一样,上来直接手撕并查集)
这道题只需要检查有无指定通路就行了,不过要特别注意查询范围,因为通路是双向的而且要求的是直接通路。

n, m = map(int, input().split())
lsu = list(map(int, input().split()))
lsv = list(map(int, input().split()))
k = int(input())
ways = set((lsu[i], lsv[i]) for i in range(m))
out = []
for _ in range(k):
    u, v = map(int, input().split())
    if (u, v) in ways or (v, u) in ways:
        out.append('Yes')
    else:
        out.append('No')
print('\n'.join(out))

题目四:井字棋

给定一个2x2的棋盘和n中不同的颜色,要求每行每列均不能出现相同的颜色,计算总共有多少种填充方案。

输入:
第一行包括一个整数n,表示颜色的数量。

输出:
输出一个整数,表示有多少种填充方案。

输入示例:
2

输出示例:
2

限制:
颜色的种类n <= 10

思路:

筱羊冰冰:有一说一,感觉就属这个题有意思吧。我当时看完,感觉就有一点像排列组合(业余玩家,不太清楚具体的类型)。
n种颜色,如果颜色足够(指大于四种),我们其实也只能取出四种来操作,所以只需要一个
C n 4 C_n^4 Cn4
所以我们其实只需要考虑四种以内的情况。

两种颜色:

1221
2112

三种颜色:
我们自然可以想到,拿两种颜色就可以填上面的两种
C 3 2 ∗ 2 C_3^2 * 2 C322
然后,如果是三种颜色都要,有12种,肯定是有一个重复的,那么对角线重复就有两种情况,剩下的其实就是将三个数字填入三个位置,
A 3 3 A_3^3 A33
就是6 + 6*2 = 18。

到这里其实就应该明白了,我们只需要知道 i 种颜色有多少种即可,因为 i = 2, 3, 4,我们完全可以直接写出来,剩下的就是一个组合问题,再给出一个阶乘列表。

# ls[i]为i种颜色都使用,对应的可能数
# 四种颜色忘了说了,不过就是个A44
ls = [0, 0, 2, 12, 24]
# ls_jc[i] = i!
ls_jc = [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]
ret = 0
n = int(input())
if n <= 1:
	# 他在系统公告中,提示了0的问题
    ret = 0
elif n <= 4:
    for i in range(2, n+1):
        ret += ls[i] * ls_jc[n] // (ls_jc[i] * ls_jc[n-i])
        # 还有一个限制就是输出大小,这里原题目是有的
        ret %= 1000000007
else:
    for i in range(2, 5):
        ret += ls[i] * ls_jc[n] // (ls_jc[i] * ls_jc[n-i])
        ret %= 1000000007
print(ret)

小插曲:

当时有一块写错了,然后跑出来只有27%,自己就去看了一下范围是小于等于十,那么案例至少有10个吧。
然后自己因为有边界检测,负数、0、1、2都能正确,那么至少对三个,反推出案例应该是11个,那么就是3往上有问题,所以将矛头对准了ls[3],果然是算少了,改成12,啪的一下,很快就过了……

题目五:堆积木

给定一个已有的字符串和一个目标字符串,可以从右边删除一个字符,也可以往左边插入一个字符,删除和插入操作的次数没有限制,问最少操作多少次可以使已有字符串变成目标字符串。

输入解释
5原串长度
1 5 3 4 6原串
5目标串长度
2 1 5 3 4目标串

思路:

筱羊冰冰:这个题,其实看明白了就没那么难,其实就是找最长公共子序列。

from collections import deque
l_old = int(input())
old = input().split()
l_new = int(input())
new = input().split()
length = 0
# 这里没啥原因,就是deque的头插尾插都比较快,O(1)的
s1, s2 = deque(), deque()
judge = 0
while True:
    s1.append(old[length])
    s2.appendleft(new[-length-1])
    length += 1
    if s1 == s2:
        judge = 1
        break
    elif length == min(l_old, l_new):
        break
if judge:
    print(l_old+l_new - length*2)
else:
    print(l_old+l_new)

重大失误:

上面的代码其实没考虑,如果有多对子串相同,要找出最长的……
不过感觉测试案例比较拉,所以显示还是ac了的。

凉梦空间

欢迎你进入我的个人博客网站参观交流:https://www.liangmeng.xyz

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

美团笔试题_20220409 的相关文章

  • 国际贸易词汇术语大搜罗

    价格术语 world international market price 国际市场价格 FOB free on board 离岸价 C amp F cost and freight 成本加运费价 CIF cost insurance an
  • 【保姆级教程】Docker服务在双架构(X86和ARM)编译统一实践

    在现代计算机系统中 xff0c X86和ARM64是两种常见的处理器架构 为了满足不同架构的需求 xff0c Docker镜像也需要支持双架构编包形式 本文将介绍Docker镜像双架构编包统一的实践 一 Docker镜像编包 在Docker
  • 玩Raspberrypi走过的坑

    树莓派挺有用 xff0c 基本上linux所有的功能都能用上 xff0c 比如开发个人脸识别 xff0c 搭建一个AVR开发环境 xff0c 都相当的不错 从18年到现在一年多 xff0c 也走过不少的坑 xff0c 希望分享一下自己的经验
  • 小米吉姆尼自动驾驶改造

    最近买了个小米吉姆尼 xff0c 恰好有个wifi图传 xff0c 准备做个无人驾驶 xff0c 通过图像处理实现自动驾驶 图传回到PC处理图像目前已经实现 xff0c 这个比较简单 现在存在的问题如何给吉姆尼发送信号 考虑方式有两种 xf
  • 化骨龙 GPS M80Pro 拆解

    最近玩穿越机 xff0c 用GPS的时候一不小心锡渣把9V和5V短路 xff0c 直接把化骨龙GPS M80Pro烧了血泪教训 这个GPS还是挺精致的 xff0c 于是乎拆解一下分享给大家 拆开来看其实并不复杂 xff0c 核心是一颗Ubl
  • freeRTOS 低功耗模式 和 空闲任务

    低功耗模式 1 芯片原本就支持的硬件低功耗 2 freeRTOS提供的软件低功耗 xff0c Tickless模式 xff01 当用户将宏定义 configUSE TICKLESS IDLE 配置为 1 且系统运行满足以下两个条件时 xff
  • 化骨龙zeus 800mw 图传拆解

    最近比较倒霉 xff0c 飞飞机又炸鸡了 xff0c 这次炸的有点狠 xff0c 炸到水泥路上了 xff0c 化骨龙小锤子天线炸断 xff0c 电池炸坏一个 xff0c 图传炸断天线座 xff0c 电子炸坏一个 xff0c 关键是电机这几天
  • pixhawk 电源电压电流计拆解

    闲来无事拆解了一个pixhawk带电流计的电源 xff0c 挺有意思的 xff0c 如下图 xff1a 模块挺简单的 xff0c 正面是就是一块MPS公司的电源芯片MP1593 xff0c 最高4 75 28V xff0c 3A 5V输出
  • VM中linux和windows主机进行串口通信

    最近在做关于AIS的内容 为了对AIS电文进行解码 xff0c 串口收发 数据有PC机模拟发送 xff0c 为了调试方便 xff0c 不用次次将程序放到开发板上运行 xff0c 所以利用pc主机和虚拟机进行串口通信模拟该过程 首先需要用到一
  • 基于CANoe的SecOC实现

    在今天的车载网络中 xff0c 大部分数据传输是在没有任何特殊安全措施的情况下进行的 因此 xff0c 一旦能够直接访问车辆的总线 xff0c 任何人都可以读取总线上传输的原始数据 xff0c 甚至 在今天的车载网络中 xff0c 大部分数
  • Autosar Configuration(五) Security之Csm配置

    本系列教程是根据实际项目开发中总结的经验所得 如发现有不对的地方 还请指正 目录 Autosar Configuration 一 Davinci Developer 工具介绍 Autosar Configuration 二 Davinci
  • 一文读懂Autosar SecOC通讯

    一 为什么用SecOC xff1f 在车载网络中 xff0c CAN总线作为常用的通讯总线之一 xff0c 其大部分数据是以明文方式广播发送且无认证接收 这种方案具有低成本 高性能的优势 xff0c 但是随着汽车网联化 xff0c 智能化的
  • AutoSar之微控制器抽象层MCAL

    微控制器抽象层位于AUTOSAR BSW的最底层 xff0c 包含内部驱动 xff0c 可直接访问微控制器和外设芯片 从具体应用来看 xff0c MCAL主要包括微控制器驱动 存储器驱动 通信驱动和输入输出驱动四个部分 xff0c 各部分又
  • 【高效】【IDE】VSCode 插件

    Docuemnt This 加注释文档 选中你的函数名字 xff0c 按两次ctrl 43 alt 43 D xff1b Better Comments 注释高亮 Live Server 实时预览页面 Live Server会启动一个本地服
  • 嵌入式软件算法优化

    嵌入式软件算法优化 一 算法优化原则二 算法优化方法1 系统优化2 算法优化 xff08 需要理解算法原理 xff09 3 代码优化4 使用硬件资源 xff08 需要熟悉芯片架构及资源 xff09 5 汇编 一 算法优化原则 xff08 1
  • CAN总线原理简介

    一 xff0e CAN总线简介 xff1a 是一种串行通信协议 xff0c 能有效的支持具有很高安全等级的分布实时控制应用范围十分广泛 xff0c 从高速网络到低价位的多路接线都可以使用CAN主要运用于汽车电子航天等行业 xff0c 使用C
  • freeRTOS 任务切换

    使用PendSV实现任务切换 上下文切换被触发的场合可以是 xff1a 1 执行一个系统调用 2 系统滴答定时器 SysTick 中断 br PendSV中断服务函数 br TaskSelectHighestPrior的两种方法 br br
  • make -j 参数加快编译效率

    对于大型项目 xff0c 在使用cmake控制编译时 xff0c 仅仅执行make指令效率较低 xff0c 使用make j后面跟一个数字 xff0c 比如make j4 make j6 make j14等 含义是 让make最多允许n个编
  • cmake中add_dependencies的基本作用

    假设我们需要生成一个可执行文件 该文件生成需要链接a so b so c so d so四个动态库 正常来讲 我们一把只需要以下两条指令即可 ADD EXECUTABLE span class token punctuation span
  • 命令行给cmake传递参数

    我们期望在编译前将一些信息缓存起来 然后用CMakeLists txt进行构建时 希望可以访问之前缓存给cmake的变量 比如我们希望缓存TARGET CPU 并且他的值为X86 那么我们可以在命令行或者脚本中执行一下操作 cmake DT

随机推荐

  • 在CMakeLists.txt如何执行脚本?execute_process

    execute process span class token punctuation span COMMAND span class token function bash span SCRIPT PATH name sh WORK P
  • C++运算符重载中有些方法为什么需要定义为友元函数

    C 43 43 提供运算符重载主要目的 xff1a 希望对象之间的运算看起来可以和编译器内置类型一样丝滑 xff1b 相当于是告知编译器 xff0c 类对象之间运算应该如何去做处理 通过实现一个复数类 xff0c 来阐述本文章的主题 xff
  • linux网络编程之socket,bind,listen,connect,accept

    socket span class token macro property span class token directive hash span span class token directive keyword include s
  • Linux网络发送和接收内核缓冲区大小的设置

    socket属性 xff1a SO SNDBUF 发送缓冲区 SO SNDBUF Sets or gets the maximum socket send buffer span class token keyword in span by
  • docker查看运行时容器的IP地址

    使用inspect来查看容器的信息 span class token function docker span inspect span class token punctuation span docker name span class
  • python基础梳理(一)

    一 python程序的组成 表达式 xff1a 建立并且处理数据对象且能返回数据对象的引用关系 示例 xff1a 1 43 2 系统会产生1和2俩个对象 xff0c 并且进行处理生产对象3 xff0c 将对象3返回回去 二 核心的数字类型
  • 串级PID结构及参数调整见解

    在设计控制系统中 xff0c 常用的控制算法为PID xff0c 即比例 积分 微分控制器 能够实现对控制对象的物理特性的控制 xff0c 以期达到特定的运行效果 此外由于PID控制器的灵活特性 xff0c 可以与其它控制算法进行灵活的组合
  • freeRTOS 开启关闭调度器、挂起恢复调度器、vTaskStepTick

    1 开启调度器 br vTaskStartScheduler 43 vPortSetupTimerInterrupt 设置systick xff0c 初始化低功耗运行系统补偿时间 br 43 xPortStartScheduler 43 p
  • 通过Flask框架封装Tushare获取的日线股票数据

    概要介绍 概要介绍 xff08 TuShare id 282782 xff09 当我们需要进行量化交易分析 xff0c 或者通过代码进行股票的数据计算 xff0c 研究金融时 xff0c 我们需要获取最基本的股票价格 xff0c 开盘价收盘
  • linux系统安装硬盘分区建议

    笔者使用linux也很长时间了 xff0c 但总有在使用一段时间之后感觉系统分区不是很合理 xff0c 这里就算是给自己总结一下 xff0c 也跟大家一起分享吧 一 常见挂载点的情况说明 一般来说 xff0c 在linux系统中都有最少两个
  • Python3.4简单爬虫实现之抓取糗事百科段子

    网上的python教程大都是2 X版本的 xff0c python2 X和python3 X相比较改动比较大 xff0c 好多库的用法不太一样 xff0c 我安装的是3 4 1 xff0c 就用3 4 1实现一下网页内容抓取 首先是库 xf
  • 关于stm32中串口重定向问题详解(找个时间好好理解下)

    usart这部分代码我也是从网上copy出来的 xff0c 一下是作者的解释 xff1a 简单地说 xff1a 想在mdk 中用printf xff0c 需要同时重定义fputc函数和避免使用semihosting 半主机模式 xff09
  • http解析库http-parser

    一 http parser简介 1 简介 http parser是一个用C编写的HTTP消息解析器 xff0c 可以解析请求和响应 xff0c 被设计用于高性能HTTP应用程序 它不会进行任何系统调用及内存分配 xff0c 它不会缓冲数据
  • centos系统重置root密码,忘记密码修改

    1 开机按下Ecs键 xff0c 进入如下界面 2 根据需要选择系统内核版本并按e键 3 光标移动到 linux 16 开头的行 xff0c 找到 ro 改为 rw init 61 sysroot bin sh xff1b 4 按 Ctrl
  • summary1 如何在Python中创建基本的ROS节点[AI]

    本课程结束时 xff0c 您将能够 xff1a 1 在模拟中 xff0c 使用ROS控制TurtleBot3机器人 2 使用roslaunch和rosrun启动ROS应用程序 3 使用关键ROS命令行工具询问正在运行的ROS应用程序 4 创
  • switch case语句用法

    一般情况下 xff0c 判断语句常用的有if else xff0c 三目运算符 xff0c 还有switch case等 xff0c 根据不同需求使用其判断语句 下面以简单示例展示 xff1a 在输入框中输入数字 xff0c 判断其星期几
  • 四轴飞行器基础

    原文知识来自果壳网 四轴飞行器基础篇 xff0c 进行一些适量增删 基本原理与名词解释 1 遥控器篇 通道 通道就是可以遥控器控制的动作路数 xff0c 比如遥控器只能控制四轴上下飞 xff0c 那么就是1个通道 但四轴在控制过程中需要控制
  • OPENWRT,爱快等软路由推荐

    这种用于路由器的开源固件 操作系统可以让它获得大多数路由器所不具备的功能 xff0c 甚至可以把一台旧PC变成强大的路由器或防火墙设备 软路由提供的一些特性和功能包括带宽监控 VLAN支持 高级无线设置 VPN集成 高级安全等等 在这篇文章
  • freeRTOS 时间管理

    1 相对时间延时 br vTaskDelay gt prvAddCurrentTaskToDelayedList 函数分析之后 xff0c 有步骤解析 br 为什么使用两个延时列表 xff1f br br br 2 绝对时间延时 br Pr
  • 美团笔试题_20220409

    前言 笔试一共五道编程题 xff08 四 43 一 xff09 xff0c 一为专项编程题 xff0c 估计不同岗位有题目不一样 xff0c 使用的是赛码网 xff0c 允许跳出界面使用自己的IDE 在此感谢筱羊冰冰提供的部分题目及题解 题