天天看點

網易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