几何判断之“Dancing Stars on Me”

题目大意:给你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 }
原文地址:https://www.cnblogs.com/love-fromAtoZ/p/7345176.html