解题思路:拿着笔画着画着,发现每增加一个交点,就会增加n+1个平面 。因此我们可以遍历所以直线 ,将已经遍历过的直线储存在lines列表中,然后求当前直线 与 lines中已遍历直线的交点,最后用set集合实现对交点的去重。
注意事项:set()是不可以直接对二维列表进行去重。例子:
set([[1,2],[1,2]])会报错
转化为set([(1,2),(1,2)])是正确的,即将列表的中的元素转化为tuple形式。
参考代码:
n = int(input())
lines = []
ans = 1
for i in range(n):
point = []
a,b = map(int,input().split())
if (a,b) in lines:
continue
for k,h in lines:
if a!=k:
x = (h-b)/(a-k) #求交点
y = (a*h-k*b)/(a-k)
point.append((x,y))
lines.append((a,b))
s = len(set(point)) #将列表转化为tuple,可以实现对多维数组去重
ans += (s+1)
print(ans)
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复