目录
构成的正方形数量
考察数学、set集合
题目描述
输入N个互不相同的二维整数坐标,求这N个坐标可以构成的正方形数量。(内积为零的两个向量垂直)
输入描述
第一行输入N,N代表坐标数量,N为正整数。N<=100
之后的K行输入为坐标x y,以空格分隔,x、y为整数,-10<=x,y<=10
输出描述
输出可以构成正方形数量
示例1
输入
3
1 3
2 4
3 1
输出
0
示例2
输入
10
0 0
0 1
1 0
1 1
2 0
0 2
2 1
1 2
2 2
输出
6
注意
(1,0),(0,1),(1,2),(2,1)也可以构成正方形。
解析
确定2点,以这2点组成正方形的一条边,此时便可以确定正方形的另外两点的位置,有2种情况,需要判断另外2点是满足要求。
答案
function getSquareCount(str) {
let coordinates = str.split('\n')
let n = coordinates.shift()
if (n <= 3) {
return 0
}
let squareCount = 0;
const set = new Set(coordinates);
for (let i = 0; i < coordinates.length; i++) {
let [x1, y1] = coordinates[i].split(" ").map((ele) => parseInt(ele));
for (let j = i + 1; j < coordinates.length; j++) {
let [x2, y2] = coordinates[j].split(" ").map((ele) => parseInt(ele));
let x3 = x1 - (y1 - y2);
let y3 = y1 + (x1 - x2);
let x4 = x2 - (y1 - y2);
let y4 = y2 + (x1 - x2);
if (set.has(x3 + " " + y3) && set.has(x4 + " " + y4)) squareCount++;
let x5 = x1 + (y1 - y2);
let y5 = y1 - (x1 - x2);
let x6 = x2 + (y1 - y2);
let y6 = y2 - (x1 - x2);
if (set.has(x5 + " " + y5) && set.has(x6 + " " + y6)) squareCount++;
}
}
return squareCount / 4;
}
console.log(getSquareCount(`3
1 3
2 4
3 1`))
console.log(getSquareCount(`9
0 0
0 1
1 0
1 1
2 0
0 2
2 1
1 2
2 2
`))
<