【Python训练营】Python每日一练----第27天:平面切分

146 阅读3分钟

「这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战」。

📢📢📢📣📣📣 🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,多多关照😜😜😜 🏅🏅🏅2021年度博客之星TOP100,2021年度博客之星领域TOP5,Python领域优质创作者,欢迎大家找我合作学习(文末有VX 想进学习交流群or学习资料 欢迎+++) 💕 入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀 💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺 🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈 🌟🌟🌟✨✨✨

题目描述

题目描述 平面上有 N 条直线,其中第 i 条直线是 y = A_i x + B_i 。 请计算这些直线将平面分成了几个部分。 输入描述 第一行包含一个整数 NN。 以下N 行,每行包含两个整数 A_i, B_i 。

输出描述 一个整数代表答案。

输入输出样例 示例 输入 3 1 1 2 2 3 3

输出 6

运行限制
最大运行时间:1s
最大运行内存: 256M

解题思路

  • 输入时将斜率和截距以元组的形式进行存储,存储在一个大的列表中:list1 = [tuple(map(int,input().split()))for i in range(a)]
  • 将列表进行去重处理,除去相同的直线:list1 = list(set(list1))
  • 求这条直线和其他直线的交点,如果相交的话,新的直线和已有的直线共有n个交点,则划分出的部分数量多出n+1
  • 如果有交点的话,则斜率一定不同,相同的话就不符合条件,继续重复上一个步骤
  • 求交点: x = (b1-b2)/(a1-a2) y = a1*x+b1
  • 将交点加入集合中,集合去重,防止出现相同的交点pos.add((x,y))
  • 第二重循环外求值:sum += len(pos)+1

源码分享

# Time    : 2022/2/22 14:30
# File    : 平面切分.py
# Author  : 是Dream呀!
# 一万次悲伤,依然会有Dream,我一直在最温暖的地方等你!
a = int(input())
list1 = [tuple(map(int,input().split()))for i in range(a)]
# print(list1)
list1 = list(set(list1))  # 对线进行去重处理
sum = 0
if list1:
    sum = 2
    for i in range(1,len(list1)):
        a1,b1 = list1[i]
        # 创建集合存储下面要求的交点;
        pos = set()
        # 求这条直线和其他直线的交点,如果相交的话,新的直线和已有的直线共有n个交点,则划分出的部分数量多出n+1
        for j in range(i):
            a2,b2 = list1[j]
            # 如果有交点的话,则斜率一定不同,相同的话就不符合条件,继续重复上一个步骤
            if a1 == a2:
                continue
            # 求交点
            x = (b1-b2)/(a1-a2)
            y = a1*x+b1
            # 将交点加入集合中,集合去重,防止出现相同的交点
            pos.add((x,y))
        sum += len(pos)+1
print(sum)

学习总结

1.元素形式将空格连续输入的数据进行存储:tuple(map(int,input().split()))for i in range(a) 2.求交点的方法:两条直线:y = a1x+b1和y = a2x+b2 交点x = (b1-b2)/(a1-a2) y = a1*x+b1

🏅今天是我在Python训练营的第 1 天,希望每天都能见到最棒的你🏅

🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了 ❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~ 在这里插入图片描述 在这里插入图片描述