魔法阵
昨天做的腾讯笔试题目,有这样一道题:
其实思路挺简单的,输入n为n个样例,接下来输入2n行的数字,每行数字以空格隔开
思路就是,计算两个点之间的距离,然后比较距离的比值是否为2,比较难处理的是距离的存储,因为是正方形,四边距离是一样的,对角距离是一样的,故有两个不同的数,可采用Set集合进行存储。
接下来附上代码:
import java.util.*; /** * Created by asus on 2018/3/24. */ public class MagicStone { public static void main(String[] args) { List<int[][]> list = new ArrayList<>(); //获取键盘输入的数字,即测试样例的个数,n的取值范围为1-5 Scanner sc = new Scanner(System.in); int n = sc.nextInt(); //初始化,将数据存入数组里 while (n > 0) { int[][] num = new int[4][2]; //将键盘输入的数字存进数组里,此为x轴数据 Scanner reader1 = new Scanner(System.in); String[] ch1 = reader1.nextLine().split(" "); for (int i = 0; i < 4; i++) { num[i][0] = Integer.parseInt(ch1[i]); } //将键盘输入的数字存进数组里,此为y轴的数据 Scanner reader2 = new Scanner(System.in); String[] ch2 = reader2.nextLine().split(" "); for (int i = 0; i < 4; i++) { num[i][1] = Integer.parseInt(ch2[i]); } list.add(num); n -= 1; } for (int listIndex = 0; listIndex < list.size(); listIndex++) { int[][] num = list.get(listIndex); Set set = new HashSet(); for (int i = 0; i < 4; i++) { for (int j = i + 1; j < 4; j++) { double length = (num[i][0] - num[j][0]) * (num[i][0] - num[j][0]) + (num[i][1] - num[j][1]) * (num[i][1] - num[j][1]); set.add(length); //System.out.println(length+","); } } //判断set集合里元素的个数 if (set.size() == 2) { //如果集合里只有两个值,判断两个值的比值 double[] value = new double[2]; Iterator it = set.iterator(); while (it.hasNext()) { for (int i = 0; i < 2; i++) { value[i] = (double) it.next(); //System.out.print(value[i]+","); } } if (value[0] / value[1] == 2 || value[1] / value[0] == 2) { System.out.println("YES"); } else { System.out.println("NO"); } } else { System.out.println("NO"); } } } }