0
点赞
收藏
分享

微信扫一扫

【每日一题】备战冲击蓝桥杯国赛——Python程序设计 | Day10 | 平面切分 | 真题代码解析


今天是2020年省赛的最后一题,大家加油啊!~

每天刷一道题,话不多说,先刷近两年的题吧,从2020的开始,如果有一起的可以加入我们!!!

一起来刷题,冲击国赛!!!


扫码 我的主页 网页左边 群二维码

加入方式:可以在下方的微信名片加我,然后拉你入群。(记得备注暗号我要拿国奖


2020年第十一届蓝桥杯赛题总览

2020年的题就是这些,类型分为两种,分别是结果填空和程序设计,我们每天刷一道题,省赛没问题!
在这里插入图片描述

平面切分(题目)

(本题总分:25分)

官方练习系统:https://www.lanqiao.cn/problems/505/learning/


—>【问题描述】

平面上有N条直线,其中第 i i i条直线是 y = A i × x + B i y=A_i×x+B_i y=Ai×x+Bi

请计算这些直线将平面分成了几个部分。

—>【输入描述】

第一行包含一个整数 N N N

以下 N N N行,每行包含两个整数 A i , B i A_i,B_i Ai,Bi

其中, 1 ≤ N ≤ 1000 , − 1 0 5 ≤ A i , B i ≤ 1 0 5 1\le N\le 1000,-10^5\le A_i,B_i\le10^5 1N1000105Ai,Bi105

—>【输出描述】

输出一个整数,表示答案。

—>【输入输出样例】


解析


通过阅读题干,本题——难度中上:⭐⭐⭐⭐

考察类型:计算几何、思维

考察知识点:map(),max()


分析:


代码

Python代码实现:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2022/3/4 15:19
# @Author  : 府学路18号车神
# @Email   :yurz_control@163.com
# @File    : Day10.py

n = int(input("输入平面上直线的条数:"))
# 首先去除重叠的直线
lines = set(tuple(map(int, input("输入每条直线的A和B的值:").split())) for i in range(n))
n = len(lines)
new_lines = list(lines)


# 规则
def get_area(n, lines):
    p = 2   # 设置判断条件,一条直线有两个平面
    if n == 1:      # 出口
        return p
    for x in range(1, n):
        point = set()
        for y in range(x):
            # 当直线的斜率不同的时候才会出现交叉的时候(在本题中的A就是斜率K),由此我们计算不重复交点数
            if lines[x][0] != lines[y][0]:
                i = (lines[x][1]-lines[y][1])/(lines[y][0]-lines[x][0])     # 判断两直线是否存在交点
                j = (lines[x][0]*lines[y][1]-lines[x][1]*lines[y][0])/(lines[x][0]-lines[y][0])
                point.add((i, j))
        p += len(point)+1   # 添加计算的不重复交点数
    return p
print(get_area(n, new_lines))

今天最后一题,稍有难度,加油!

由此,我们可以快速得出结果,验证完毕!


今天开刷第 天,难度中上,欢迎大家加入,一起变强,一起自律,一起上国赛!!!

今天的题目有点难哈,有不同解法的可以在下面留言哦!~

往期刷题路线:

刷题路线Detail
Day-01门牌制作
Day-02寻找2020
Day-03跑步锻炼
Day-04蛇形填数
Day-05排序
Day-06装饰珠
Day-07成绩统计
Day-08单词分析
Day-09数字三角形

官方刷题练习系统:http://lx.lanqiao.cn/


ღ( ´・ᴗ・` )

举报

相关推荐

0 条评论