直线
![](https://i-blog.csdnimg.cn/blog_migrate/2f5f33b4dacf5dabfdd098e3cec1ae51.png)
import os
import sys
# 请在此输入您的代码
Zb = []
for i in range(0,20):
for j in range(0,21):
Zb.append([i,j])
d = set()#对重复的直线进行筛选
for i in Zb:
for j in Zb:
if j[0] != i[0]:
k = (j[1]-i[1])/(j[0]-i[0])#点斜式公式
b = (j[0]*i[1] - i[0]*j[1])/(j[0] - i[0])#两点式公式推导得到截距公式
c = (k,b)
if c not in d:
d.add(c)
print(len(d)+20)#一共有20组座标形成的直线垂直于x轴
思路:
分析问题,得到考点为直线公式的运用。
如何确定两条直线是否重叠(为同一条直线)——分析其直线方程y = kx + b 中的k(斜率)和b(截距)是否相等。
把问题转化为求解两点组成的直线的k,b。
首先创建一个列表Zb,把符合题目条件的点座标存到里面。
新建一个集合d,用于去除斜率和截距相同的直线。
用一个嵌套循环,把一个点和另外所有的点进行组合,求每组的k和b,注意第二层循环要设置一个条件,横坐标不相等时才进行循环(直线垂直的情况)。
然后把每组k和b存到集合d里面用集合的性质自动进行去重。
最后打印输出集合的长度,再加上20条垂直x轴的直线即可得到答案。