题目大意:给你n个点,判断他们能否构成一个正n边形,能就输出“YES”,不能输出"NO"。
解题思路:既然是正多边形,那么边长一定相等,且任意对角线都会大于边长(三角形除外),所以只需要先对任意一个点与其他所有点进行距离计算,再遍历所有可能的任意两点,找出最短的路径有多少条,如果正好是n条,就是正多边形。(因为n最多100,所以无需考虑时间问题)
AC代码:
1 import java.util.*; 2 3 public class Main{ 4 static double dis(int x1,int y1,int x2,int y2){ 5 double d = Math.sqrt((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1)); 6 return d; 7 } 8 public static void main(String[] args){ 9 Scanner sc = new Scanner(System.in); 10 int t = sc.nextInt(); 11 while(sc.hasNext()){ 12 int n = sc.nextInt(); 13 int x[] = new int[n]; 14 int y[] = new int[n]; 15 int sum = 0; 16 double min = 1000000.0; 17 for(int i = 0;i < n;i ++){ 18 x[i] = sc.nextInt(); 19 y[i] = sc.nextInt(); 20 } 21 for(int i = 1;i < n;i ++){ 22 if(min > dis(x[0],y[0],x[i],y[i])){min = dis(x[0],y[0],x[i],y[i]);} 23 } 24 for(int i = 0;i < n - 1;i ++){ 25 for(int j = i + 1;j < n;j ++){ 26 if(dis(x[i],y[i],x[j],y[j]) == min) sum ++; 27 } 28 } 29 if(sum == n){System.out.println("YES");} 30 else {System.out.println("NO");} 31 t --; 32 } 33 } 34 }