第十一届蓝桥杯试题I:平面切分
题目
题解
- 多画一下发现面的数量等于交点数量+1,进而转化为求交点的数量,注意同一个交点只记一次,需要去重操作
lines = set() # 存储直线的集合
res = 1 # 初始面的数量为1
n = int(input()) # 输入边的数量
def check(A, B):
points = set() # 存储交点的集合,set去重
for line in lines:
a, b = line
if A != a: # 如果斜率不相等
x = (b - B) / (A - a) # 计算交点的x坐标,交点:Ax+B=ax+b
y = A * x + B # 计算交点的y坐标
points.add((x, y)) # 添加交点到集合中
return len(points) # 返回交点的数量
for _ in range(n):
A, B = map(float, input().split()) # 输入直线的斜率和截距
if (A, B) not in lines: # 如果该直线没有出现过
lines.add((A, B)) # 将直线添加到集合中
res += check(A, B) + 1 # 根据数学推论,面的数量是交点数量加1
print(res) # 输出最终的面的数量
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人