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

坚强是说给别人听的谎言 提交于 2020-04-07 04:52:54

 

做菜

题干

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

每一行是一个菜谱,<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<=50

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

接下来输入大牛的起始位置,x,y, 0<=x<n, 0<y<=m,左上角为0, 0

接下来输入合法移动方式数量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


 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!