小白的秋招记录——机试编程题(平安科技)

 

1、把任意一个数a开b次方

小白的秋招记录——机试编程题(平安科技)_第1张图片

输入样例:

1000 2

输出样例:

31.622777

 

代码: 

# 二分法

import sys

line = sys.stdin.readline().strip().split()
a = float(line[0])
b = int(line[1])

low = 0
high = a
res = (low+high)/2.0

while abs(res**b-a) > 10**(-8):
    if res**b>a:
        high = res
    else:
        low = res
    res = (low+high)/2.0
print '%.6f'%res

# 感觉这题有两个bug:
# 题目描述是输出小数点后7位,但是输出样例是6位,输出6位时全A
# 测试while循环的边界条件时发现 > 10 ** (-4, -5, -6, -7)都能全A

 

2、有向图中的环

给定一个有向图,判定其中是否存在环

输入描述:

一个用邻接矩阵定义的有向图,可以直接用json.loads()读取,格式如下:
{"a": ["b", "c", "d"], "b": ["a", "d"], "c": ["d"]}
其中字典中的key是节点名,value是这个节点所有孩子的节点名
从标准输入读取一个str,使用json.loads()转换为dict, 如果用其他编程语言,需要考虑怎么把string解析成json格式

输出描述:

如果图中有环,打印True到标准输出
否则,打印False到标准输出

输入样例:

{"a": ["b", "c"], "b":["e"], "c":["d"], "e": ["a"]}

输出样例:

True

我的其他测试样例:{"a": ["b", "c", "d"], "b": ["a", "d"], "c": ["d"]};  {"a": ["b", "c", "e"], "b":["e"], "c":["d"]};  {"a": ["b", "c"], "b":["e"], "c":["d"], "e": ["a"]};  {"a": ["b"], "b": ["c"], "c":["a"]};  {"a": ["b"], "b": ["c"]}

代码:

# 深度优先搜索

import json
import sys
from collections import defaultdict

def dfs(v, dic, visited):
    if visited[ord(v)-ord('a')]:
        res = True
    else:
        res = False
        visited[ord(v)-ord('a')] = 1

        if v in keys:
            temp = dic[v]
            for i in temp:
                res = dfs(i, dic, visited)
                return res
        visited[ord(v)-ord('a')] = 0
    return res

global keys
line = sys.stdin.readline().strip()
dic = json.loads(line)
keys = dic.keys()
visited = [0] * 26
res = dfs(keys[0], dic, visited)
print res

很惭愧笔试的时候没有写出来,通过暴力 print True A了50%

刚刚自己测了五组数据都通过了,但是不知道还有没有其他的问题,大佬们如果发现有bug一定要告诉我呀,小白感激不尽(默认输入为连通图)

 

3、分糖果

小白的秋招记录——机试编程题(平安科技)_第2张图片

 小白的秋招记录——机试编程题(平安科技)_第3张图片

 代码:

import sys
n = int(sys.stdin.readline().strip())
a = map(int, sys.stdin.readline().strip().split())
res = 0
if sum(a)%n != 0:
    res = -1
else:
    ave = sum(a)/n
    for i in a:
        temp = i - ave
        if abs(temp)%2:
            res = -1
            break
        elif temp>0:
            res += temp/2
print res

 

 

 

 

总结:一个半小时,20道单选,3道编程,编程一共A了2.5题,第二题没有OJ测试过,所以如果大佬们发现了bug一定要告诉我呀 (from: 一个对自己没有信心的小白)

 

 

 

 

你可能感兴趣的:(机试)