赞
踩
难度系数:⭐⭐
考察题型:枚举 数论
涉及知识点: 集合docker=set() 斜率截距公式(k,b)
思路分析:
一条普普通通的直线,竟然能变出这么多花样?直线,接招!( •̀ ω •́ )✧
首先创建二维列表存放坐标系,然后二重循环遍历,给每个坐标点赋初值。
因为要统计不同的直线,所以用直线的性质:斜率和截距 来区分,并存放到集合容器里,
最后一点小细节,当斜率不存在时,k会报错,
所以单独计算,最后直接加上20条垂直x轴的直线。
- #直线
- points=[[x,y] for x in range(20) for y in range(21)] #创建二维列表:代表xy坐标系
- docker=set() #创建集合属性的容器:因为集合里的元素不会重复
- for i in points: #二重循环遍历每个坐标
- x1,y1=i[0],i[1] #注意书写格式:a,b=c,d
- for j in points:
- x2,y2=j[0],j[1]
- if x1==x2: #特殊情况:直线垂直时斜率不存在,先跳过最后计算
- continue
- k=(y2-y1)/(x2-x1) #斜率公式
- b=(x2*y1-x1*y2)/(x2-x1) #截距公式
- if (k,b) not in docker: #存入容器里没有的(斜率,截距)对
- docker.add((k,b))
- print(len(docker)+20) #输出结果:容器的长度40237+斜率不存在的20种情况=40257
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。