テンセント-模擬試験-技術研究開発類-モバイルクライアント開発-2018実習生募集

6681 ワード

先日テンセント-模擬試験-技術研究開発類-モバイルクライアント開発-2018実習生募集の筆記試験問題を行いました.これは個人が作った2番目の問題です.テーマの意味は簡単です.4つの点が正方形を構成できるかどうかを判断することです.くだらないことは言わないで、下のコードを直接見て、大牛の伝言を歓迎します.
小Qは全世界を探して4つの魔法の石の所在地を探し当てて、4つの魔法の石がちょうど1つの正方形を構成することができる時魔法の陣を起動して、小Qはこれによって1つの願望を実現することができます.4つの魔法石の位置座標を与えて、Qは魔法陣を起動することができるかどうかを知りたいです
入力:1行に1つの整数tが含まれていることを入力して、どれだけのグループのデータを表して、各グループのデータの第1行は4つの整数x[i]を含んで、第2行は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 listX = new ArrayList<>();
            List listY = new ArrayList<>();
            List 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 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");
        }
    }
}