版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
前阵子做了腾讯-模拟考-技术研发类-移动客户端开发-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");
}
}
}