题目描述
解题思路
1.先穷举所有坐标,然后再遍历他们
2.如果横坐标相等或者纵坐标相等说明两点在同一条直线上,同一条直线横坐标和纵坐标只能出现一次
3.如果横坐标或纵坐标不相等说明两点没有在同一直线上,通过set两点构成直线的k和b看有多少条直线(根据y=kx+b)的公式
代码
li=[[x,y] for x in range(20) for y in range(21)]
same_x=set()
same_y=set()
diff_xy=set()
for x1,y1 in li:
for x2,y2 in li:
#如果横坐标相等或者纵坐标相等说明两点在同一条直线上,同一条直线横坐标和纵坐标只能出现一次
if x1==x2:
same_x.add((x1,x2))
continue
elif y1==y2:
same_y.add((y1,y2))
else:
#如果横坐标或纵坐标不相等说明两点没有在同一直线上,通过set两点构成直线的k和b看有多少条直线
k=(y2-y1)/(x1-x2)
b=(y2*x1-y1*x2)/(x1-x2)#y=kx+b
diff_xy.add((k,b))
print(len(same_x)+len(same_y)+len(diff_xy))