网易游戏笔试题

网易游戏-初级游戏开发2019第三批笔试题

菜鸡本鸡只写了一道半。。使用python

1.计算竖式计算中每个数字出现的次数 并输出出现最多的数字

第一行输入是一共有几道乘法题
后面每一行是两个因数
比如:

2
123 456
22 33

对每个竖式输出1-9每个数字出现的次数
然后给出出现最多的数字
比如:

2 2 2 2 3 3 1 3 1
0 3 2 0 0 5 1 0 0
6

我的想法是先搞个函数计算每个得出的值以及输入的值里面的每个数字出现次数,然后存在字典里,把第二个数分成个位、十位、百位……的几个数,依次和第一个数去乘。

我的代码:

import sys 

def get_num(val,length):
    v__=[]
    for i in range(length):
        if i == 0:
            s = val%10
            d[s] += 1 
        else:
            s = (val%10**(i+1)-val%10**(i))/10**i
            d[s] += 1     

if __name__ =="__main__":
    n = int(sys.stdin.readline().strip())
    dic = {}
    for i in range(10):
        dic[i]=0
    for i in range(n):
        v_ = [] 
        d = {}
        for i in range(10):
            d[i] = 0
        line = sys.stdin.readline().strip()
        values = list(map(int,line.split()))
        v1 = values[0]
        v2 = values[1]
        length = len(str(v2))
        get_num(v1,len(str(v1)))
        get_num(v1*v2,len(str(v1*v2)))
        for i in range(length):
            if i == 0:
                s = v2%10
                v_.append(s)
                d[s] += 1 
            else:
                s = (v2%10**(i+1)-v2%10**(i))/10**i
                v_.append(s)
                d[s] += 1 
        for i in v_:
            result = i*v1
            get_num(result,len(str(result)))
        st = ""
        for k,v in d.items():
            if k == 0:
                continue
            else:
                st = st+str(v)+" "
                dic[k]+=v
            if k == 9:
                print(st)
    re1,re2 = [0,0]
    for k,v in dic.items():
        if k == 0:
            continue
        else:
            if v > re2:
                re1 = k
                re2 = v
    print(re1)


2.设计一个6字符键盘

设计一个有6个字符的键盘:
ASDFGH
现在需要用这个键盘键入只含有上述字符的字符串,每次输入时只能用一根手指操作,开始时手指默认在最左边,当手指移动到另外一个键上时需要计算距离,比如我设计的A和S一起,A在最左边,我要键入AS,这时距离是1。
我们要设计键盘使得整个字符串输入的距离最短,并返回这个最短距离即可
输入:

3
H
ASDF
ASDFHGS

输出:

0
3
9

想法很简单,键盘有n(6×5×4×3×2)种设置的方式,就挨个试,然后打印出来最短距离

import sys 

def exact_value(a,b):
    c = a-b
    if c>0:
        return c
    else:
        return -c

if __name__ =="__main__":
    li = ['S','D','F','G','H']
    n = int(sys.stdin.readline().strip())
    
    for i in range(n):
        line = sys.stdin.readline().strip()
        re = 999
        dic = {}
        last = 'A'
        for i in range(6):
            dic['A']=i
            for step in range(1,6):
                for i in range(len(li)):
                    if li[i] == 'S':
                        dic[li[i]]= (dic['A']+step)%6
                    else:
                        dic[li[i]]= (dic[li[i-1]]+step)%6
                for k,v in dic.items():
                    if v == 0:
                        last = k
                dis = 0 
                for i in line:
                    dis += exact_value(dic[i],dic[last])

                    last = i
                if dis<re:
                    re = dis
        print(re)

这个搞一半时间到了,然后列的情况少了很多 看了别人用全排列的方法 改成了这样:

import sys 

def exact_value(a,b):
    c = a-b
    if c>0:
        return c
    else:
        return -c

def allsort(A):
    lent=len(A)
    if lent==1:
        return A[lent-1]
    else:
        result=[]
        for i in range(lent):
            ch=A[0:i]+A[i+1:]   #将第i个元素取出
            for s in allsort(ch):   #s按序取ch全排列后的各值和A[i]组合
                result.append(A[i]+s) 
    return result
 
if __name__ =="__main__":
    li = allsort(["A","S","D","F","G","H"])
    dic = {}
    # print(li)
    position = [0,1,2,3,4,5]
    n = int(sys.stdin.readline().strip())
    for i in range(n):
        line = sys.stdin.readline().strip()
        result = 999999
        for i in li:
            start = i[0]
            dic = dict(zip(i,position))
            dis = 0
            for i in line:
                dis += exact_value(dic[i],dic[start])
                start = i
            if dis < result:
                result  = dis
        print(result)
        

我练的题还是太少了= =

3.打方块游戏

这题是一个打方块的游戏,两个及以上颜色一样的能消除,每当一个部位消除成功后上面的方块下落填充,右边的方块向左对齐,大概是这个意思,然后给出最后剩下几个方块即可。
输入第一行是这个游戏几行几列 然后每行可以有10种颜色,按0-9表示
输入:

5 5
1 2 2 3 4
1 2 4 5 2
2 3 2 2 2
2 2 2 2 2
3 4 4 4 5

输出:

随便是几我也不知道这个最后能剩几个 懂意思就好惹

感觉要用到矩阵我就没想出来 直接放弃了= =

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值