首页 > 网易互娱8.12笔试
头像
叫我傻狍子
编辑于 2020-08-13 10:45
+ 关注

网易互娱8.12笔试

网易互娱8.12笔试
第一题打麻将AC:
这一道题出的非常不好,幸亏我前几天刚刚学会打麻将要不然肯定做不出来。
题意解析:按照他的规则前面7张风头已经凑好了,||这之前的题干都是废话,这之后是要考的意思:||  判断给的牌能不能凑他规定的三个扑。
麻将规则解释:在此题中我们需要判断牌有没有三个扑,有三个扑便胜利,一般来说一个 “扑” 为(AAA)或者(ABC),对应的实例:(一万 一万 一万)或者(一饼 二饼 三饼),但是笔试题目中的改变了可以胜利的 扑 的规则,把数字从同样(AAA)或者连续(ABC)改成了:147 258 369  这三个特殊组合,因为牌数太多所以可以在这三扑加起来之后去掉随意的两张牌,这样也可以胜利,打过麻将的同学便能够体会出题目中没有说明的关键信息:胜利条件依然是需要三个 扑,因此只需要按照平时打麻将的思路:确定每一个花色的 扑 合不合法就行了,如果三个扑全部合法,那么胜利。
解题思路:
从题目规则可知,必须三个花色全都有,而且易知7张牌不能有重复的,要不然按他的规则不可能赢。
所以判断每种花色的数字是不是规定数字组合的子集,如果是那么这个花色是合法扑,如果三扑合法那么胜利。
根据他的规则,只要是7张不同的牌,每个花色的数字都是 完全扑(就是三张)数字组合的子集(因为他的规则要求可以随意在三个完全扑的情况下去掉两个牌,所以是子集就行),那就胜利。因为如果你摸了 一万 五万 那肯定赢不了因为1 5 无法满足1 4 7或者2 5 8这两个组合中的任意一个,也就意味着你这两张牌组不成一扑,而且总共7张牌需要三种花色的三扑,有一张错的牌就不够。
times = int(input())
cmds = []
for _ in range(times):
    cmds.append(input())
for cmd in cmds:
    w = set()
    b = set()
    t = set()
    pais = list(cmd.split())
    for pai in pais:
        num = int(pai[0])
        huase = pai[1]
        if huase == 'W':
            w.add(num)
        elif huase == 'B':
            b.add(num)
        else:
            t.add(num)
    if len(w) + len(b) + len(t) != 7:
        print('NO')
    else:
        checka = {1, 4, 7}
        checkb = {2, 5, 8}
        checkc = {3, 6, 9}
        wf = bf = tf = False
        if w <= checka or w <= checkb or w <= checkc:
            wf = True
        if b <= checka or b <= checkb or b <= checkc:
            bf = True
        if t <= checka or t <= checkb or t <= checkc:
            tf = True
        if wf and bf and tf:
            print('YES')
        else:
            print('NO')
2.炸格子
我是用的暴力解,20%
N=int(input())
mat=[]
for _ in range(N):
    rowin=list(map(int,input().split()))
    mat.append(rowin)


while len(mat)>0:
    maxsum=0
    maxr=0
    maxc=0
    for row in range(len(mat)):
        for col in range(len(mat)):
            suma=sum(mat[row])
            sumb=0
            for rr in mat:
                sumb+=rr[col]
            mysum=suma+sumb-mat[row][col]
            if mysum>maxsum:
                maxsum=mysum
                maxr=row
                maxc=col
    print((maxr+1),(maxc+1))
    mat.pop(maxr)
    for rr in mat:
        rr.pop(maxc)

3.找出最大任务的时间 0%
我觉得应该是程序栈的思路,写了半天没做出来。
下面是写了一半的代码,脑子都死机了
for _ in range(int(input())):
    cmdn = int(input())
    cmds = []
    for _ in range(cmdn):
        cmds.append(input())
    time_list = []
    id_list = []
    status_list = []
    for cmd in cmds:
        time, id, status = map(int, cmd.split())
        time_list.append(time)
        id_list.append(id)
        status_list.append(status)
    id_stack=[]
    time_stack=[]
    d=dict()
    for id in id_list:
        d[id]=0
    maxtime=0
    qiant=0
    for i in range(cmdn):
        if status_list[i]==0:
            if len(id_stack)>0:
                d[id_stack[-1]]+=time_list
            id_stack.append(id_list[i])
        else:
            id_stack.pop()



全部评论

(2) 回帖
加载中...
话题 回帖

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐