解题思路:拿着笔画着画着,发现每增加一个交点,就会增加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 人评分
简单的a+b (C语言代码)浏览:528 |
【密码】 (C语言代码)浏览:350 |
C语言考试练习题_排列 (C语言代码)浏览:767 |
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:366 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:569 |
简单的a+b (C语言代码)浏览:457 |
矩形面积交 (C++代码)浏览:1204 |
【偶数求和】 (C语言代码)浏览:460 |
永远的丰碑 (C语言代码)浏览:608 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:661 |