网易游戏-初级游戏开发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
输出:
随便是几我也不知道这个最后能剩几个 懂意思就好惹
感觉要用到矩阵我就没想出来 直接放弃了= =