百度2017春季招聘笔试

题目:已知有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-8
import sys
import 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值