前言

笔试一共五道编程题(四+一),一为专项编程题,估计不同岗位有题目不一样,使用的是赛码网,允许跳出界面使用自己的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种颜色,如果颜色足够(指大于四种),我们其实也只能取出四种来操作,所以只需要一个
Cn4C_n^4 Cn4​
所以我们其实只需要考虑四种以内的情况。

两种颜色:

1 2 2 1
2 1 1 2

三种颜色:
我们自然可以想到,拿两种颜色就可以填上面的两种
C32∗2C_3^2 * 2 C32​∗2
然后,如果是三种颜色都要,有12种,肯定是有一个重复的,那么对角线重复就有两种情况,剩下的其实就是将三个数字填入三个位置,
A33A_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 += 1if s1 == s2:judge = 1breakelif 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

美团笔试题_20220409相关推荐

  1. 美团笔试题 淘汰分数

    美团笔试题 淘汰分数 某比赛已经进入了淘汰赛阶段,已知共有n名选手参与了此阶段比赛,他们的得分分别是a_1,a_2-.a_n,小美作为比赛的裁判希望设定一个分数线m,使得所有分数大于m的选手晋级,其他 ...

  2. 2018 java 美团笔试题

    想进美团的同学注意了,这里是修真院面试笔记整理,那么这里就给大家分享一下 [2018 java 美团笔试题] 技术一面 1.我们先聊聊java基础知识吧,说出Object类的常用方法? 2.刚刚说到o ...

  3. 美团笔试题2021.8.29(第四题求大佬解答)

    美团笔试题2021.8.29 又再帮同学写,推了这周的周赛,侥幸都有点思路 丁香树 题目描述 思路 因为芳香值最大为30,所以用一个数组存储已走过的芳香值,然后走到第i个点,找比当前芳香值小的有多少个 ...

  4. 美团笔试题之查找幸运星

    美团笔试题之查找幸运星 题目其实很简单,特别简单,当时看一眼题目我心中就有思路了,问题就是我卡在了如何循环输入上了,简直是不可思议, 当时我想复杂了,现在看来如此简单的问题我卡了这么久,实在是不应该啊 ...

  5. 美团笔试题 小美的跳方格

    看到一道美团(不知道什么时候)的笔试题,问题描述如下: 在网上查到过其他网友的解法,感觉和我的理解不太一样, 这里写一下我自己对题目的理解. 我比较疑惑的是小美跳方格的方式,是每次移动一格,还是可跳到 ...

  6. 美团笔试题:股票交易日

    在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行).给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益. ...

  7. Java后端之美团笔试题

    更新的时间:2022-5-7笔试 今天下午考的笔试,好难,我把题目贴这里,会做的大佬贴一下思路吧!!! 题目一: 小团饲养了一小缸鱼,并且买了A.B.C三类饲料来喂养它们,小团的饲养计划如下: -- ...

  8. 美团笔试题——公司食堂

    题目描述 小美和小团所在公司的食堂有N张餐桌,从左到右摆成一排,每张餐桌有2张餐椅供至多2人用餐,公司职员排队进入食堂用餐.小美发现职员用餐的一个规律并告诉小团:当男职员进入食堂时,他会优先选择已经坐 ...

  9. 美团笔试题——正则序列

    题目描述 我们称一个长度为n的序列为正则序列,当且仅当该序列是一个由1~n组成的排列,即该序列由n个正整数组成,取值在[1,n]范围,且不存在重复的数,同时正则序列不要求排序 有一天小团得到了一个长度 ...

最新文章

  1. Java Jsoup库 实现天气爬取(附第三方库加载方式)
  2. Ehcache 整合Spring 使用页面、对象缓存
  3. Redis操作ZSet类型
  4. List中toArray()的使用方法
  5. eclipse 运行MapReduce程序错误异常汇总(解决Map not fount)
  6. python旋转排序数组_LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现...
  7. Pinpoint 监控
  8. 马云欣赏你,你的创业就已成功了一半
  9. Python从2.6升级到2.7,使用pip安装module,报错:No Module named pip.log(转载)
  10. Linux平台代码覆盖率测试工具GCOV简介
  11. 如何使用JSTL及JSTL标签库
  12. poEdit制作WordPress主题汉化,插件汉化攻略
  13. 计算机网络(五) | 数据链路层:MAC地址、以太网协议、MTU和ARP协议
  14. 这六大方法,如何让 Transformer 轻松应对高难度长文本序列?
  15. Internet Explorer 编程简述(序)
  16. 北科大协同中心计算机,2021考研调剂:北科大钢铁共性技术协同创新中心公告
  17. 逆向倾向评分 (Inverse Propensity Scoring, IPS) 原理解析与MF算法的结合使用
  18. 流量劫持(上):流量劫持是如何产生的
  19. 前装车载手机无线充电搭载“翻倍”增长,市场份额争夺战白热化
  20. NOIP2017Day1T1-小凯的疑惑

热门文章

  1. 【转】流媒体技术笔记(视频编码相关)
  2. ios开发-分享一些免费的接口
  3. 【计算机网络】因特网通信
  4. 房产抵押贷款需要的资质有哪些
  5. 设置linux 自动定时重启
  6. C++中的stack容器适配器
  7. 设置Word文档密码的两种方式
  8. 如何构建故障与危机的处理能力?《高可用及容灾架构体系化建设》下篇
  9. C语言编码转换----负数的二进制表示方法
  10. using的三种用法