百度2017春季招聘笔试题

来源:互联网 发布:淘宝开通企业店铺 编辑:程序博客网 时间:2024/04/27 17:03

题目:已知有n个点分布在三维空间,且各个点都有三种颜色中的一种,即’R’,’G’,’B’,每次输入格式为颜色和坐标,要求计算组成的最大三角形的面积
,另外该三角形需要满足的条件是三个点要么颜色完全相同,要么完全不同。

输入示例:
5
R 0 0 0
G 92 14 7
R 0 4 0
R 0 0 3
G 12 16 8

输出结果:
6.00000

# coding=utf-8import sysimport math# 计算两点间距离def distance(a, b):    tmp = (a[1] - b[1])**2 + (a[2] - b[2])**2 + (a[3] - b[3])**2    return math.pow(tmp, 0.5)# 计算三点构成的面积def countArea(a, b, c):    line1 = distance(a, b)    line2 = distance(a, c)    line3 = distance(b, c)    p = (line1 + line2 + line3) / 2    return math.pow(p * (p - line1) * (p - line2) * (p - line3), 0.5)def maxArea(data):    areas = []    for i in range(len(data)-2):        for j in range(i+1,len(data)-1):            for k in range(j+1,len(data)):                areas.append([ countArea(data[i],data[j],data[k]), data[i][0], data[j][0], data[k][0]])    areas.sort(key=lambda x:x[0],reverse=True)    # print(areas)    for x in areas:        if( ( x[1] == x[2] == x[3] ) or ( x[1] != x[2]  and x[1] != x[3] and x[2] != x[3] ) ):            return x[0]if __name__ == "__main__":    # 读取第一行的n    n = int(sys.stdin.readline().strip())    data = []    for i in range(n):        # 读取每一行        line = sys.stdin.readline().strip().split()        for i in range(1, 4):            line[i] = int(line[i])        data.append(line)    # print(data)    # data = [['R', 0, 0, 0],    #         ['G', 92, 14, 7],    #         ['R', 0, 4, 0],    #         ['R', 0, 0, 3],    #         ['G', 12, 16, 8]    #         ]    # n = len(data)    # data.sort(key=lambda x:x[0])    if(n == 3):        print("%.5f"%countArea(data[0], data[1], data[2]))    else:        maxA = maxArea(data)        print("%.5f"%maxA)
0 0
原创粉丝点击