华为OD机试 2023B卷题库疯狂收录中,刷题点这里
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
输入N个互不相同的二维整数坐标,求这N个坐标可以构成的正方形数量。[内积为零的的两个向量垂直]。
第一行输入为N,N代表坐标数量,N为正整数。
之后的N行输入为坐标x y,以空格分隔。
x,y为整数,-10<=x,y<=10
输出可以构成的正方形数量。
package com.guor.od;
import java.util.*;
public class OdTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 坐标数量
int N = sc.nextInt();
// 3个坐标构不成正方形
if (N <= 3) {
System.out.println(0);
return;
}
// 存储坐标x y的集合
List<int[]> list = new ArrayList<>();
for (int i = 0; i < N; i++) {
// 坐标x y
int[] arr = new int[2];
arr[0] = sc.nextInt();
arr[1] = sc.nextInt();
list.add(arr);
}
int count = 0;
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < list.size() - 1; i++) {
for (int j = i + 1; j < list.size(); j++) {
int dist = getLength(list.get(i), list.get(j));
map.put(dist, map.getOrDefault(dist, 0) + 1);
}
}
for (int v : map.values()) {
count += v * (v - 1) * (v - 2) * (v - 3) / 24;
}
System.out.println(count);
}
public static int getLength(int[] a, int[] b) {
int x = a[0] - b[0];
int y = a[1] - b[1];
return x * x + y * y;
}
}
4
0 0
1 2
3 1
2 -1
1
下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。