三维空间中有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 }