网易互娱4.11测开笔试,五题编程回顾(附Python代码)

五题代码分别过了 100 83.33 100 20 54.54
前三题简单,第四题是真的难,第五题也蛮难的。。
第一题:游戏里面的一个机制是死亡后金币减半(取天棚计算),求角色死亡N次后的金币剩余量
简单题 不说了
import math
t=int (input())
dict={}
for i in range(t):
    list=[0]*2
    list=[int (i) for i in input().split()]
    dict[i]=list
for i in range(t):
    for j in range(dict[i][1]): #death time
        dict[i][0]=math.ceil(dict[i][0]/2)
    print(dict[i][0])

第二题:
扑克排序 A~K分别对应1~13的权重 四种花色对应(d:0,c:13,h:26,s:39)四个权重,一张牌的权重由扑克的点数和花数相加决定比如3 d的权重就是3
现在输入n张扑克,要从权重从小到大排序,并且连续的权重只留首尾两张牌,不连续的就保留,然后输出最后的扑克序列
我的思路就是直接暴力搞,先放两个字典存两个权重,然后依次输入扑克的时候就再建一个字典,存每一个扑克的初始位置和权重(因为最后的输出排序是和最开始的不一样的,所以需要一个字典记录位置),然后对输入扑克列表排序,第一张和最后一张一定保留,中间的扑克,如果它的值不等于前面的+1或者后面的-1就保留(说明他是单牌或者是连续序列的首尾)。最后在保留下来的扑克里面依次去字典里找对应的扑克和花色
这里要注意,因为它扑克权重是1~13 花色权重是0 13 26 39,这样可以保证任何一张牌的权重都不一样(从1d~Ks正好是1~52),所以可以放心地建字典找
但是我只过了83.33.。有个例子不知道是啥没过
还有就是我这字典有可能建反了,其实我感觉最好的方法是可以在最后那个字典里面用二分来查的,我就是最开始准备二分来查,结果发现不行,我想错了。。。
dict_poke={'A':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'10':10,'J':11,'Q':12,'K':13}
dict_color={'d':0,'c':13,'h':26,'s':36}
n=int(input())
list=[]
for i in range(n):
    list.append(input().split())
dict_value={}
sort_list=[]
for i in range(n):
    dict_value[i]=dict_poke[list[i][0]]+dict_color[list[i][1]]
    sort_list.append(dict_poke[list[i][0]]+dict_color[list[i][1]]) #用于排序
sort_list.sort()
final_list=[sort_list[0]]
for i in range(1,len(sort_list)-1):
    if sort_list[i]-1 != sort_list[i-1]&nbs***bsp;sort_list[i]+1 != sort_list[i+1]:
        final_list.append(sort_list[i])
final_list.append(sort_list[-1])
for i in range(len(final_list)): 
    for j in range(len(dict_value)):
        if dict_value[j]==final_list[i]:
            print(list[j][0],list[j][1])





第三题:
有n个帮派,帮派里面的人数量不定,每个人都有一个战斗值,现在要从全部人里面选出战斗值前k大的人出来决战,输出按逆序
topK问题,维护一个节点数为k的最小堆就可以了
具体看代码
对了 这里有个问题是因为每个帮派的人数量不一定,所以说整个二维数组里面的有些值是空的,刚才有个人问我为啥数组总越界估计就是这里出了问题,遍历每一行(就是每个帮派)的时候要重新计算这一行的列数(就是这个帮派的人数),我当时在这里也搞了蛮久。。

import heapq
k,n=input().split()
k=int(k)
n=int(n)
list=[]
for i in range(n):
    list.append(input().split())
heap=[]
heapq.heapify(heap)
row=len(list)
#col=len(list[i]) 不能放这里
for i in range(row):
    col=len(list[i])
    for j in range(col):
        if not list[i][j]:
            continue
        list[i][j]=int(list[i][j])
        if len(heap)<k:
            heapq.heappush(heap,list[i][j])
        elif list[i][j] >heap[0]:
            heapq.heapreplace(heap,list[i][j])
heap.sort(reverse=True)
for i in heap:
    print(i,end=" ")


第四题:
给一堆点给你叫你求这些点的对称坐标。。。我是真的不会求,四个点两条线我会手算,N个点我是真的不会,需要一个数学大佬出来教教我们。最后我随便搞了个点数比较少的做法过了一个例子(20%)。。。
第五题:
就是三个字符串之间的LCS(最长公共子串问题),两个字符串之间直接动态规划就行,算法导论那本书里面有,网上也一大堆讲解的,这里我就不讲了。但是三个字符串我又懵了。。最后我就把写了个两个字符串之间的LCS函数,然后把三个字符串两两放进去比,然后输出他们那三个最长公共子串中最短的一个,这样做明显是有问题的,因为我返回的其实还是其中两个字符串的LCS,这并不代表另一个字符串也有相同的公共子串。最后这个方法骗了54.54,还算蛮幸运,我想过用一个字典存一下两个字符串之间的公共子串及其长度,发现实现起来有点困难。。。希望有大佬放出来ac的代码
#网易互娱##笔试题目##测试开发工程师#
全部评论
老哥 我和你情况差不多 比你少过一些 ....
点赞 回复 分享
发布于 2020-04-11 22:31
诶?第五题,三维dp不可以吗~感觉跟二维dp的思路差不多就是不知道O(n^3)会不会超时(我的岗位没笔试哈哈,所以不知道对不对)
点赞 回复 分享
发布于 2020-04-11 23:09
我懂了 第二题没ac的原因是我把39写成了36.。
点赞 回复 分享
发布于 2020-04-11 23:50
我觉得网易是我做过几家面试比较简单的了。原来可以import呀,😂,1 3两个题,我都是原生的。第三个题可以直接把二维转一维,排序输入前k个。
点赞 回复 分享
发布于 2020-04-12 09:16
我最后一题也是54%,不知道怎么改了
点赞 回复 分享
发布于 2020-04-12 16:51
来复盘了一下,觉得第二题用Java应该这样做: 用Map存一下数字和牌类型,然后计算出每张牌权重后,用TreeMap<权重,map<数字,牌类型>>给每张牌排好咯。 后面就是用楼主的方法,除去第一张和最后一张,如果本张牌权重等于前面一张牌+1和后面一张牌-1,就扬咯
点赞 回复 分享
发布于 2020-04-12 19:56
请问大佬是实习还是春招啊
点赞 回复 分享
发布于 2020-04-12 23:41

相关推荐

冲芭芭拉鸭:你这图还挺新,偷了。
投递美团等公司10个岗位
点赞 评论 收藏
分享
11-18 13:45
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
13
分享
牛客网
牛客企业服务