免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
最近行われテンセントを-模擬試験-クラスの技術の研究開発-インターン-2018モバイルクライアント開発の書かれた質問は、このタイトルを行うには二人で、タイトルの意味は、非常に単純で4ポイントが正方形を形成するかどうかを決定することで、前置きなしに、次のコードで直接見ては、大きな牛のメッセージを歓迎しました。
トピック:小Qは魔法の願いを取ることができ、小さなQを開始する時期4賢者の石はただの正方形を形成する際に、魔法石のシート4を見つけるために、全世界を検索します。賢者の石は現在、四つの小Qが魔法を開始するかどうかを知りたいのですが、座標指定されました
入力:入力ラインは、データの多くのセットは、データは各4整数x [i]との最初のラインを含む前記方法整数tを含んで、第二行は4つの整数を含むY [i]は
出力:データの各セットのために、我々はマジックワードの入力を開始することができます場合は、「YES、または」NO」
import java.awt.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
/**
* 腾讯-模拟考-技术研发类-移动客户端开发-2018实习生招聘
*
* 题目:小Q搜寻了整个世界找到了四块魔法石所在地,当四块魔法石正好能够构成一个正方形的时候将启动魔法阵
* ,小Q就可以借此实现一个愿望。现在给出四块魔法石所在坐标,小Q想知道能否启动魔法阵
*
* 输入:输入一行包括一个整数t,表示多少组数据,每组数据的第一行包括四个整数x[i],第二行包括四个整数y[i]
*
* 输出:对于每组数据,如果能启动魔法阵的话输入“YES,否则“NO”
* Created by XQM on 2018/4/4.
*/
public class example_46 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();//记录几组数据
if (1 <= t && t <= 5){
List<Integer> listX = new ArrayList<>();
List<Integer> listY = new ArrayList<>();
List<Point > points = new ArrayList<>();
for (int i = 0;i < t;i++){
for (int j = 0;j < 2;j++){
if (j == 0){
for (int k = 0;k < 4;k++){
listX.add(sc.nextInt());
}
}else {
for (int k = 0;k < 4;k++){
listY.add(sc.nextInt());
}
}
}
}
/**
* 转化成Point方便计算
*/
for (int i = 0;i < listX.size();i++){
Point p = new Point();
p.x = listX.get(i);
p.y = listY.get(i);
points.add(p);
p = null;
}
for (int k = 0;k < t;k++){
isSquare(k,points);
}
}
}
private static void isSquare(int k, List<Point> points) {
double[] length = new double[6];
int m = 0;
for (int i = 4*k;i < 3+4*k;i++){
for (int j = i+1;j < 4+4*k;j++){
length[m++] = Math.pow(points.get(i).getX() - points.get(j).getX(),2.0)
+ Math.pow(points.get(i).getY()-points.get(j).getY(),2.0);
}
}
Arrays.sort(length);
//三个条件,四个不重合,临边相等,对角线相等
boolean b1 = length[0]>0 && length[1]>0 && length[2]>0 && length[3]>0 && length[4]>0 && length[5]>0;
boolean b2 = length[0] - length[1] < 0.0001 && length[1] - length[2] < 0.0001;
boolean b3 = length[2] - length[3] < 0.0001 && length[4] - length[5] < 0.0001;
if (b1 && b2 && b3){
System.out.println("YES");
}else {
System.out.println("NO");
}
}
}