百度2017春招笔试真题编程题集合之寻找三角形

题目描述

三维空间中有N个点,每个点可能是三种颜色的其中之一,三种颜色分别是红绿蓝,分别用‘R‘, ‘G‘, ‘B‘表示。 现在要找出三个点,并组成一个三角形,使得这个三角形的面积最大。但是三角形必须满足:三个点的颜色要么全部相同,要么全部不同。

输入描述:

首先输入一个正整数N三维坐标系内的点的个数.(N <= 50) 接下来N行,每一行输入 c x y z,c为‘R‘, ‘G‘, ‘B‘ 的其中一个。x,y,z是该点的坐标。(坐标均是0到999之间的整数)

输出描述:

输出一个数表示最大的三角形面积,保留5位小数。

输入例子:

5

R 0 0 0

R 0 4 0

R 0 0 3

G 92 14 7

G 12 16 8

输出例子:

6.00000

参考答案

 1 import java.util.*;
 2 public class FindTriangle {
 3     public static void main(String[] args) {
 4         Scanner sc = new Scanner(System.in);
 5
 6         int n = sc.nextInt();//点的个数
 7         sc.nextLine();
 8         String[] nums = new String[n];
 9         double temp = 0.0;
10         double area = Double.MIN_VALUE;
11         for (int i = 0; i < n; i++) {
12             nums[i] = sc.nextLine();
13         }
14
15         char[] colors = new char[n];
16         for (int i = 0; i < n; i++) {
17             colors[i] = nums[i].split(" ")[0].charAt(0);
18         }
19         int[] x = new int[n];
20         for (int i = 0; i < n; i++) {
21             x[i] = Integer.parseInt(nums[i].split(" ")[1]);
22         }
23
24         int[] y = new int[n];
25         for (int i = 0; i < n; i++) {
26             y[i] = Integer.parseInt(nums[i].split(" ")[2]);
27         }
28
29         int[] z = new int[n];
30         for (int i = 0; i < n; i++) {
31             z[i] = Integer.parseInt(nums[i].split(" ")[3]);
32         }
33
34         for (int i = 0; i < n; i++) {
35             for (int j = i + 1; j < n; j++) {
36                 for (int k = j + 1; k < n; k++) {
37                     //判断颜色是否全部相等或全部不等
38                     if (colors[i] == colors[j] && colors[j] == colors[k] ||
39                             colors[i] != colors[j] && colors[j] != colors[k] && colors[i] != colors[k]) {
40                         double a = Math.pow(Math.pow(Math.abs(x[i] - x[j]), 2) +
41                                 Math.pow(Math.abs(y[i] - y[j]), 2) +
42                                 Math.pow(Math.abs(z[i] - z[j]), 2), 0.5);
43                         double b = Math.pow(Math.pow(Math.abs(x[i] - x[k]), 2) +
44                                 Math.pow(Math.abs(y[i] - y[k]), 2) +
45                                 Math.pow(Math.abs(z[i] - z[k]), 2), 0.5);
46                         double c = Math.pow(Math.pow(Math.abs(x[k] - x[j]), 2) +
47                                 Math.pow(Math.abs(y[k] - y[j]), 2) +
48                                 Math.pow(Math.abs(z[k] - z[j]), 2), 0.5);
49
50                         double p = (a + b + c) / 2;
51                       //海伦公式求空间三角形面积
52                         temp = Math.pow(p * (p - a) * (p - b) * (p - c), 0.5);
53                         if (area < temp) {
54                             area = temp;
55                         }
56                     }
57                 }
58             }
59         }
60         System.out.printf("%.5f", area);
61     }
62 }
时间: 2024-08-03 19:24:50

百度2017春招笔试真题编程题集合之寻找三角形的相关文章

百度2017春招笔试真题编程题之有趣的排序

问题描述: 度度熊有一个N个数的数组,他想将数组从小到大 排好序,但是萌萌的度度熊只会下面这个操作: 任取数组中的一个数然后将它放置在数组的最后一个位置. 问最少操作多少次可以使得数组从小到大有序? 输入描述: 首先输入一个正整数N,接下来的一行输入N个整数.(N <= 50, 每个数的绝对值小于等于1000) 输出描述: 输出一个整数表示最少的操作次数. 示例1 输入 4 19 7 8 25 输出 2-----------------------------------------------

网易2017春招笔试真题编程题集合题解

01 双核处理 题目 一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务.n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间. 输入描述 输入包括两行:第一行为整数n(1 ≤ n ≤ 50)第二行为n个整数lengthi,表示每个任务的长度为length[i]kb,每个数均为1024的倍数. 输出描述输出一个整数,表示最少需

网易2017春招笔试真题编程题集合(8)——奇怪的表达式求值

常规的表达式求值,我们都会根据计算的优先级来计算.比如*/的优先级就高于+-.但是小易所生活的世界的表达式规则很简单,从左往右依次计算即可,而且小易所在的世界没有除法,意味着表达式中没有/,只有(+, - 和 *).现在给出一个表达式,需要你帮忙计算出小易所在的世界这个表达式的值为多少 输入描述: 输入为一行字符串,即一个表达式.其中运算符只有-,+,*.参与计算的数字只有0~9. 保证表达式都是合法的,排列规则如样例所示. 输出描述: 输出一个数,即表达式的值 输入例子: 3+5*7 输出例子

网易2017春招笔试真题编程题集合(7)——集合

小易最近在数学课上学习到了集合的概念,集合有三个特征:1.确定性 2.互异性 3.无序性.小易的老师给了小易这样一个集合:S = { p/q | w ≤ p ≤ x, y ≤ q ≤ z }需要根据给定的w,x,y,z,求出集合中一共有多少个元素.小易才学习了集合还解决不了这个复杂的问题,需要你来帮助他. 输入描述: 输入包括一行: 一共4个整数分别是w(1 ≤ w ≤ x),x(1 ≤ x ≤ 100),y(1 ≤ y ≤ z),z(1 ≤ z ≤ 100).以空格分隔 输出描述: 输出集合中

网易2017春招笔试真题编程题集合——分饼干

参考:http://blog.csdn.net/wwe4023/article/details/70171648的内容 // import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String line = in.nextLine(); int n = Integer.parseInt(in.nextLine());

网易2017春招笔试真题编程题集合——调整队形

时间限制:1秒 空间限制:32768K 在幼儿园有n个小朋友排列为一个队伍,从左到右一个挨着一个编号为(0~n-1).其中有一些是男生,有一些是女生,男生用'B'表示,女生用'G'表示.小朋友们都很顽皮,当一个男生挨着的是女生的时候就会发生矛盾.作为幼儿园的老师,你需要让男生挨着女生或者女生挨着男生的情况最少.你只能在原队形上进行调整,每次调整只能让相邻的两个小朋友交换位置,现在需要尽快完成队伍调整,你需要计算出最少需要调整多少次可以让上述情况最少.例如:GGBBG -> GGBGB -> G

网易2017春招笔试真题编程题集合——消除重复元素

时间限制:1秒 空间限制:32768K 小易有一个长度为n序列,小易想移除掉里面的重复元素,但是小易想是对于每种元素保留最后出现的那个.小易遇到了困难,希望你来帮助他. 输入描述: 输入包括两行: 第一行为序列长度n(1 ≤ n ≤ 50) 第二行为n个数sequence[i](1 ≤ sequence[i] ≤ 1000),以空格分隔 输出描述: 输出消除重复元素之后的序列,以空格分隔,行末无空格 输入例子: 9 100 100 100 99 99 99 100 100 100 输出例子: 9

网易2017春招笔试真题编程题集合——赶去公司

时间限制:1秒 空间限制:32768K 终于到周末啦!小易走在市区的街道上准备找朋友聚会,突然服务器发来警报,小易需要立即回公司修复这个紧急bug.假设市区是一个无限大的区域,每条街道假设坐标是(X,Y),小易当前在(0,0)街道,办公室在(gx,gy)街道上.小易周围有多个出租车打车点,小易赶去办公室有两种选择,一种就是走路去公司,另外一种就是走到一个出租车打车点,然后从打车点的位置坐出租车去公司.每次移动到相邻的街道(横向或者纵向)走路将会花费walkTime时间,打车将花费taxiTime

网易2017春招笔试真题编程题集合(10)——小易记单词

小易参与了一个记单词的小游戏.游戏开始系统提供了m个不同的单词,小易记忆一段时间之后需要在纸上写出他记住的单词.小易一共写出了n个他能记住的单词,如果小易写出的单词是在系统提供的,将获得这个单词长度的平方的分数.注意小易写出的单词可能重复,但是对于每个正确的单词只能计分一次. 输入描述: 输入数据包括三行: 第一行为两个整数n(1 ≤ n ≤ 50)和m(1 ≤ m ≤ 50).以空格分隔 第二行为n个字符串,表示小易能记住的单词,以空格分隔,每个单词的长度小于等于50. 第三行为m个字符串,系