1. 程式人生 > >百度2017春招筆試真題編程題集合之尋找三角形

百度2017春招筆試真題編程題集合之尋找三角形

import math 可能 表示 tint blog 整數 angle printf

題目描述

三維空間中有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 }

百度2017春招筆試真題編程題集合之尋找三角形