天天看点

网易python笔试题_2017秋季网易校园招聘编程题和个人解答(python)

做菜

题干

大牛喜欢做菜,每种菜需要不同的材料,求需要准备多少种材料。

每一行是一个菜谱,<50字节,输入行数不确定,不超过50行。

难点:如何获取输入结束的标志

输入示例

apple banana

potato apple egg

输出示例

4

import sys

food = {}

for i in sys.stdin.readlines():

for f in i.split(' '):

food[f] = 1

print len(food)

迷宫

大牛要按特定的移动方式在迷宫中跳跃移动,在最糟糕的情况下,将迷宫出口设置在某个位置时,大牛走出迷宫所需的最少步数值最大,求这个最大值。如果将除垢设置在某处大牛永远也走不出去的话,输出-1.

输入n和m,0

接下来输入n行,每行有m个字符,'.'表示可走的地方,非'.'表示不可走的地方

接下来输入大牛的起始位置,x,y, 0<=x

接下来输入合法移动方式数量k

接下来的k行输入合法移动方式, dx, dy, -50<=dx, dy <=50

题干

输入示例

3 3

...

...

...

1 0

4

0 1

1 0

-1 0

0 -1

输出示例

2

转载请注明原始链接

mn = raw_input().split(' ')

n = int(mn[0])

m = int(mn[1])

tmap = {}

for i in range(n):

tmap[i] = {}

s = raw_input()

for j in range(m):

if s[j] == '.':

tmap[i][j] = '.'

else:

tmap[i][j] = 'x'

starts = raw_input().split(' ')

start = (int(starts[0]), int(starts[1]))

k = int(raw_input())

steps = []

for i in range(k):

s = raw_input().split(' ')

steps.append((int(s[0]), int(s[1])))

def move(start, step):

return (start[0] + step[0], start[1] + step[1])

def check(loc):

global m, n, tmap

x, y = loc

if x < 0 or x >= n:

return False

if y < 0 or y >= m:

return False

if tmap[x][y] != '.':

return False

return True

lst = []

lst.append(start)

tmap[start[0]][start[1]] = 0

while(len(lst) != 0):

loc = lst[0]

c = tmap[loc[0]][loc[1]]

del lst[0]

for step in steps:

if check(move(loc, step)):

newloc = move(loc, step)

lst.append(newloc)

tmap[newloc[0]][newloc[1]] = c + 1

def final():

global tmap, n, m

max = 0

for i in range(n):

for j in range(m):

if tmap[i][j] == '.':

return -1

elif tmap[i][j] != 'x':

if tmap[i][j] > max:

max = tmap[i][j]

return max

def output():

global tmap, n, m

for i in range(n):

for j in range(m):

print tmap[i][j],

print ''

print final()

数列

题干

一个数列l中, i < j且l[i] < l[j]的数量称为这个数列的"对数"。

大牛草稿纸上有一个数列,它的长度为n,由1、2、3……n不重复的数字排列而成,大牛知道它的对数为k。由于草稿纸上有污渍,这个数列的一部分不见了。试求原来数列可能的情况有多少种。

输入n, k

下一行输入数列,0表示看不见的数字(<=10个)

输入示例

5 5

4 0 0 2 0

输出示例

3

s = raw_input().split(' ')

n = int(s[0])

k = int(s[1])

l = raw_input().split(" ")

ls = []

for i in l:

ls.append(int(i))

import itertools

count = 0

zeros = []

nums = {}

unums = []

for i in range(1, n+1):

nums[i] = 0

for i in range(n):

nums[ls[i]] = 1

if ls[i] == 0:

zeros.append(i)

for i in nums:

if nums[i] == 0 and i != 0:

unums.append(i)

for x in itertools.permutations(unums, len(unums)):

lls = ls[:]

adc = 0

for i in range(len(zeros)):

lls[zeros[i]] = x[i]

for i in range(n):

for j in range(i + 1, n):

if lls[i] < lls[j]:

adc += 1

if adc == k:

count += 1

print count