美团笔试题_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 的相关文章

随机推荐

  • ASP.NET Core MemoryCache 缓存

    ASP NET Core 中的缓存内存 xff08 MemoryCache xff09 ASP NET Core 中的缓存内存 ASP NET Core 中的分布式缓存 xff08 SQL Server 和 Redis 分布式缓存 xff0
  • FFmpeg In Android - 多媒体文件解封装/解码/保存Yuv

    FFMPEG视音频编解码零基础学习方法 100行代码实现最简单的基于FFMPEG 43 SDL的视频播放器 本文例子的源码 demuxing decoding cpp 修改自源码自带的例子ffmpeg源码 doc example demux
  • 【Java篇】多线程详解

    Java 多线程基础详解 文章目录 Java 多线程基础详解线程的相关概念一 创建线程的几种方式1 继承Thread类2 实现Runnable接口3 实现Callable接口4 推荐使用Runnable接口 二 线程安全1 线程安全问题引入
  • NotePad++ XMLTools 插件离线安装

    在使用NotePad 43 43 时 xff0c 在某些情形下 xff0c 需要格式化Xml格式内容 xff0c 可以使用Xml Tools插件 xff0c 注意下载安装包时 xff0c 需下载与NotePad 43 43 像匹配版本的插件
  • 【Windows逆向】【Qt】日志信息打印

    目录 x1f6eb 导读需求开发环境 1 示例程序Demo2 编写功能 xff08 QtCreator版本 xff09 3 编写功能 xff08 VS版本 xff09 x1f6ec 文章小结 x1f4d6 参考资料 x1f6eb 导读 需求
  • Ubuntu 18.04 安装ROS melodic文件错误问题broken packages

    反复多次尝试安装ros melodic xff0c 一直报错 xff0c 有文件损坏或者安装依赖问题 直接进入安装阶段 xff0c 前面的请看其他详细帖子 sudo apt span class token operator span ge
  • 在虚拟机安装Archlinux

    最近花了挺长一段时间练习在虚拟机安装archlinux的 xff0c 在这里跟大家分享一下经验 xff0c 如有错误 xff0c 欢迎大家指出 xff0c 谢谢大家 准备工作 archlinux镜像 43 vmware workstatio
  • Linux系统启动流程及系统裁剪

    一 内核管理简要理论 1 内核的功能 xff08 1 xff09 进程管理 xff08 2 xff09 内存管理 xff08 内核管理代码中代码量最大的部分 xff09 xff08 3 xff09 I O管理 xff1a 中断及中断处理 x
  • UNIX环境高级编程习题——第三章

    第三章习题 3 1 当读 写磁盘文件时 xff0c 本章中描述的函数确实是不带缓冲机制的吗 xff1f 请说明原因 xff1a span class hljs number 1 span 本章中描述的read和write函数都是系统调用 x
  • Ubuntu 16.04 安装Vmware Workstation12

    1 安装Vmware Workstation12 1 从官网上获取http www vmware com products workstation workstation evaluation html 2 如果觉得上面的方法下载得比较慢
  • Idea2017查看Class字节码文件

    Idea查看字节码文件的原理 1 javap命令的使用 在jdk工具包的bin目录下 xff0c 有一个java可执行文件javap xff0c 该工具可以查看java编译后的class文件 使用命令如下命令进行查看 javap span
  • Idea配置Web项目路径以及使用非默认Tomcat启动

    1 Web项目发布路径配置 1 首先点击Run gt Edit Configurations 2 点击左上角绿色的加号 xff0c 选择Tomcat gt Local 3 点击Deployment 4 点击绿色的小铅笔 5 在此处设置Out
  • emacs下org-mode导出pdf时pdflatex无法找到的问题解决方案

    配置环境 Deepin15 6 Linux emacs25 2 发现的问题 系统没有找到pdflatex命令 xff0c org mode无法导出latex的pdf 解决步骤 安装texlive2018 因为pdflatex是texlive
  • 通过Flask框架封装Tushare获取的日线股票数据

    概要介绍 概要介绍 xff08 TuShare id 282782 xff09 当我们需要进行量化交易分析 xff0c 或者通过代码进行股票的数据计算 xff0c 研究金融时 xff0c 我们需要获取最基本的股票价格 xff0c 开盘价收盘
  • IBM Was 打补丁记录

    0 拷贝解压ifph52925升级包 通过FTP工具 xff0c 把压缩包传到服务器 xff0c unzip d test01 9 0 0 0 ws was ifph52925 zip 1 停掉was 服务 ps ef grep was k
  • CoreText --- 段落样子CTParagraphStyle

    在前面一篇文章中 xff0c 介绍了属性文字的基本使用 xff0c 本章节主要针对文字的段落样式展开演示说明 先定义一段演示文字 xff08 文字中有中 xff0c 英文 xff09 cpp view plain copy NSString
  • 将自己的域名解析跳转到博客主页(GitHub中的gitpage跳转)

    最近突然迷上了博客 xff0c 突然又突发奇想 xff0c 将自己几个月前买的现在限制的域名拿来跳转到自己的csdn博客 经过一番研究 xff0c 总结 把自己的购买的域名 比如我买的circleyuan top 跳转到CSDN博客 只需要
  • Python3.4简单爬虫实现之抓取糗事百科段子

    网上的python教程大都是2 X版本的 xff0c python2 X和python3 X相比较改动比较大 xff0c 好多库的用法不太一样 xff0c 我安装的是3 4 1 xff0c 就用3 4 1实现一下网页内容抓取 首先是库 xf
  • 【C++】类和对象的关系

    概念 xff1a 对象 xff1a 将数据和对数据的操作方法放在一起 xff0c 形成一个相对独立的整体 属性和操作是对象的两大要素 类 xff1a 某一类对象所共有的 本质的属性和类行为 类和对象的关系 类是抽象的 xff0c 对象是具体
  • 美团笔试题_20220409

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