腾讯-模拟考-技术研发类-移动客户端开发-2018实习生招聘

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/xiaoming100001/article/details/79819392

前阵子做了腾讯-模拟考-技术研发类-移动客户端开发-2018实习生招聘的笔试题目,这是个人做的第二题,题目意思很简单,就是判断四个点能否构成正方形,废话少说,直接看下面的代码,欢迎大牛留言。

题目:小Q搜寻了整个世界找到了四块魔法石所在地,当四块魔法石正好能够构成一个正方形的时候将启动魔法阵,小Q就可以借此实现一个愿望。现在给出四块魔法石所在坐标,小Q想知道能否启动魔法阵

输入:输入一行包括一个整数t,表示多少组数据,每组数据的第一行包括四个整数x[i],第二行包括四个整数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");
        }
    }
}

猜你喜欢

转载自blog.csdn.net/xiaoming100001/article/details/79819392