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

举报
是Dream呀 发表于 2022/02/22 18:10:12 2022/02/22
【摘要】 【Python训练营】Python每日一练----第27天:平面切分

在这里插入图片描述

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

@TOC

题目描述

题目描述
平面上有 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呀!
# VX      : Xu18300396393
# 一万次悲伤,依然会有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训练营的第 27 天,希望每天都能见到最棒的你🏅

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200