小白备战蓝桥杯打卡07

平面切分

import os
import sys

# 请在此输入您的代码
n = int(input())

if n == 0:
    print(1)

a_02 = []
for i in range(n):
  a_01 = list(map(int,input().split()))
  if a_01 not in a_02:
    a_02.append(a_01)

ChuShi = 1

for i in range(0,len(a_02)):
  a_01 = a_02[i]
  JiaoDian =[]
  for j in range(i):
    if(a_01[0] != a_02[j][0]):
      x = (a_01[1] - a_02[j][1]) / (a_01[0] - a_02[j][0])
      y = x*a_01[0] + a_01[1]
      tp = [x,y]
      if tp not in JiaoDian:
        JiaoDian.append(tp)
  
  ChuShi += 1 + len(JiaoDian)

print(ChuShi)

思路:

  1. 这题非常需要自己画图找规律,从0条线分析到3条线大概规律就能找到了。

  1. 分析线的数量和新增线与前面所有线产生交点

  1. 分析规律:设平面数为s

当0条线时:

s = 1

当1条线时:

s = 2

当2条线时:分两种情况

①两条线平行

s = 2 + 1 =》 在原来一条线的基础上加一条线,平面数 +1

②两条线相交

s = 2 + 1 + 1 =》 在原来一条线的基础上加一条线,平面数 +1,新加的线与原来的一条线产生一个新交点,平面数 + 1

当3条线时:分三种情况

①三条线平行

s = 3 + 1=》 在原来两条线的基础上加一条线,平面数 +1

②第三条线与前面两条线相交于同一个交点

s = 3 + 1 + 1 + 1=》 在原来两条线的基础上加一条线,平面数 +1,原来有一个交点平面数+ 1,新加的线与原来两条线交于同一个交点,平面数 + 1

③第三条线在两条线产生新的两个交点

s = 3 + 1 + 1 + 2=》在原来两条线的基础上加一条线,平面数 +1,原来有一个交点,平面数+ 1,新加的线与原来两条线交于两个新交点,平面数 + 2

分析规律时要遵守一个原则,一次新增一条线,新增的线之和前面存在的线有关

  1. 现在我们找到如下规律:新增一条线,必定新增一个平面,再对新线与旧线进行位置分析,如果产生新交点,产生N个新交点,平面数再加N,如果与旧线产生的交点重叠,则平面数只加一。

  1. 思路理清楚了,开始编码,首先要把所有输入的斜率截距对(简称斜截对)存在一个列表中,这里要注意一个小点,为了防止两组重复的斜截对,我设置了一个if判断。

  1. 创建一个变量“ChuShi”存0条直线时平面的数量。

  1. 创建一个两层循环,第一层循环作用是为了实现“一条一条直线逐步去切割平面”,第二层循环作用是为了控制“新增直线之和前面存在的直线做位置比较”。

  1. 交点座标的求法套用“两点式公式”。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值