算法题-正方形数量-输入N个互不相同的二维整数坐标,求这N个坐标可以构成的正方形数量。

不知道是否满足所有测试用例要求,有问题还望各位及时指出,谢谢 

题目描述

输入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 (3个点不足以构成正方形)

示例 2 输入输出示例仅供调试,后台判题数据一般不包含示例

输入

4

0 0

1 2

3 1

2 -1

输出

1

已知:正方形的两个点 (x1,y1)  (x2,y2)
则:正方形另外两个点的坐标为  
x3=x1+(y1-y2)   y3= y1-(x1-x2)
x4=x2+(y1-y2)   y4= y2-(x1-x2)

x3=x1-(y1-y2)   y3= y1+(x1-x2)
x4=x2-(y1-y2)   y4= y2+(x1-x2)
从另一位博主的文章中学到这一计算公式
原文链接:https://blog.csdn.net/qq_40507857/article/details/84205680

通过上述的公式,只要枚举两个顶点,根据这两个顶点计算出要满足正方形需要的剩下两个顶点,然后判断该顶点是否在输入的列表中是否存在,如果都存在则方案数+1,最后所得方案数要除以4,因为一个正方形有四条边,每条边都会对这个正方形判断一次。

# Python

while True:
    try:
        N = int(input())
        pos_list = []
        for i in range(N):
            pos_list.append(tuple(map(int, input().split())))
        count = 0
        if N < 4:
            print(count)
        else:
            for i in range(len(pos_list) - 1):
                for j in range(i + 1, len(pos_list)):
                    x1 = pos_list[i][0]
                    y1 = pos_list[i][1]
                    x2 = pos_list[j][0]
                    y2 = pos_list[j][1]
                    x3_1 = x1 - (y1 - y2)
                    y3_1 = y1 + (x1 - x2)
                    x4_1 = x2 - (y1 - y2)
                    y4_1 = y2 + (x1 - x2)
                    if (x3_1, y3_1) in pos_list and (x4_1, y4_1) in pos_list:
                        count += 1
                    x3_2 = x1 + (y1 - y2)
                    y3_2 = y1 - (x1 - x2)
                    x4_2 = x2 + (y1 - y2)
                    y4_2 = y2 - (x1 - x2)
                    if (x3_2, y3_2) in pos_list and (x4_2, y4_2) in pos_list:
                        count += 1
            print(int(count/4))

    except:
        break

不知道是否满足所有测试用例要求,有问题还望各位及时指出,谢谢

来源:Cloud_Strife_MT

物联沃分享整理
物联沃-IOTWORD物联网 » 算法题-正方形数量-输入N个互不相同的二维整数坐标,求这N个坐标可以构成的正方形数量。

发表评论