蓝桥杯 | 平面切割【Python】

问题描述

在这里插入图片描述

个人思路

  1. 去重:利用集合的不可重复性,去掉重复直线
  2. 找规律:
    ①每增加一条直线,平面 +1
    ②每与之前直线交一个点,平面 +1

在这里插入图片描述

代码如下

"""
Author:Lucky_bacon
Tool:Pycham、python3
"""

n = eval(input())
line = [tuple(map(int,input().split(" "))) for i in range(n)]
print(line)
se = set(line)#换成集合,自动将元组内的重复元素去除
line = list(se)  #去重后的线
print(line)
if line:
    ans=2#默认第一条可切割2个平面
    #开始从第二条开始查找
    for i in range(1,len(line)):
        a1,b1=line[i]
        pos=set()#设置集合模式
        
        #搜索于之前直线是否存在交点
        for j in range(i):
            a2,b2=line[j]
            if a1==a2:
                continue
            x=(b2-b1)/(a1-a2)     #斜率
            y=a1*x+b1
            #存在交点存储起来
            pos.add((x,y))
            # print(pos)
        #每次遍历于之前的直线所得到的交点的个数,进而统计可切割平面的个数
        ans += len(pos)+1
print(ans)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值