2021年蓝桥杯python组真题-直线(细节+分析+代码)
题目 :

代码:
#直线
M=[[x,y] for x in range(20) for y in range(21)] #创建二维列表:代表xy坐标系
d=set() #创建集合属性的容器:因为集合里的元素不会重复
for i in M: #二重循环遍历每个坐标
x1,y1=i[0],i[1] #注意书写格式:a,b=c,d
for j in M:
x2,y2=j[0],j[1]
if x1==x2: #特殊情况:直线垂直时斜率不存在,先跳过最后计算
continue
k=(y2-y1)/(x2-x1) #斜率公式
b=(x2*y1-x1*y2)/(x2-x1) #截距公式
if (k,b) not in d: #存入容器里没有的(斜率,截距)对
d.add((k,b))
print(len(d)+20) #输出结果:容器的长度40237+斜率不存在的20种情况=40257
坑点:
这道题我开始做的时候把截距公式换成了:b = y1 - kx1
这个时候我会发现答案会多出很多,最后通过输出截距,才发现原来是精读问题!
分析:如果k求出来是一个无限循环小数(python输出的时候会四舍五入),而y1是整数,y1和k*x1相减的话,得到的值并不是真正的b,因为k在计算的时候被四舍五入过,会有极其细微的误差,但又非常影响结果!因为我们求到的直线方程要放进set集合里判重,如果b一个是1.000001一个是1.000000,其实是一个直线方程,但是因为计算的误差,我们误以为是两个直线方程,所以就会导致答案多出很多!
精度损失参考:
对于浮点运算通常是很危险的!
主要的危险就是:精度损失
精度损失的含义是,对于double通常存在对末尾的四舍五入。比如在1/10(十进制是0.1)但是在二进制存储却是:0.00011001100110011001100110011001100110011001100110011001 10011…
所以在进行0.1+1.1会出现:1.20000000000000018这样奇怪的答案。
这种答案是致命的,因为这种答案会导致进入set<>集合的时候。1.2000000000018和1.2被当成两个数字对待。但实际上,1.2000000…完全是精度的问题。所以我们称之位“精度损失”。
(参考文献:https://www.zhihu.com/question/42024389)
避免坑点:
我们在求截距的时候,可以用分数的形式表示小数。

细节:
y = k x + b 对于k值我们知道,k delta y delta x,如果delta x = 0就是斜率不存在。在坐标轴上就是直线垂直于x轴的情况,根据题目中的数据,斜率不存在有20种情况,但我们遇到delta x = 0的时候就先跳过,然后在最后的答案上加20种情况就是答案。
2021年蓝桥杯python组真题-直线(细节+分析+代码)的更多相关文章
- 第七届蓝桥杯javaB组真题解析-分小组(第四题)
题目 /* 分小组 9名运动员参加比赛,需要分3组进行预赛. 有哪些分组的方案呢? 我们标记运动员为 A,B,C,... I 下面的程序列出了所有的分组方法. 该程序的正常输出为: ABC DEF G ...
- 第七届蓝桥杯javaB组真题解析-煤球数目(第一题)
题目 /* 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有 ...
- 第七届蓝桥杯javaB组真题解析-四平方和(第八题)
题目 /* 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1 ...
- 第七届蓝桥杯javaB组真题解析-剪邮票(第七题)
题目 /* 剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色 ...
- 第七届蓝桥杯javaB组真题解析-方格填数(第六题)
题目 /* 方格填数 如下的10个格子 +--+--+--+ | | | | +--+--+--+--+ | | | | | +--+--+--+--+ | | | | +--+--+--+ (如果显 ...
- 第七届蓝桥杯javaB组真题解析-凑算式(第三题)
题目 /* 凑算式 B DEF A + --- + ------- = 10 C GHI (如果显示有问题,可以参见[图1.jpg]) 这个算式中A~I代表1~9的数字,不同的字母代表不同的数字. 比 ...
- 第七届蓝桥杯javaB组真题解析-生日蜡烛(第二题)
题目 /* 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填写他开始 ...
- 第七届蓝桥杯javaB组真题解析-抽签(第五题)
题目 /* 抽签 X星球要派出一个5人组成的观察团前往W星. 其中: A国最多可以派出4人. B国最多可以派出2人. C国最多可以派出2人. .... 那么最终派往W星的观察团会有多少种国别的不同组合 ...
- Python解答蓝桥杯省赛真题之从入门到真题(二刷题目一直更新)
蓝桥刷题 原文链接: https://github.com/libo-sober/LanQiaoCup Python解答蓝桥杯省赛真题之从入门到真题 不同字串 """ 一 ...
- 第四届蓝桥杯 c/c++真题
第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们 ...
随机推荐
- Python笔记(1)——字符串(Python编程:从入门到实践)
字符串 一.使用方法修改字符串大小写 1. 方法:变量.tittle():首字母大学显示字符串中的每个英文单词 2. 方法:变量.upper():字符串全改为大写 3. 方法:变量.lower():将 ...
- 电脑日常维护技巧(windows系统)
一.磁盘检测 cmd-->chkdsk 二.磁盘修复 cmd-->sfc/scannow 三.删除缓存文件 运行-->%temp%
- Swagger详解
1.Swagger的介绍 1.1 Swagger的工作原理 1.系统启动,扫描到api工程中的Swagger2Configuration类 2.在此类中指定了包路径,会找到在此包下及子包下标记有@Re ...
- [Mac技巧] 你真的会使用Mac的“聚焦搜索”吗?
Mac的"聚焦搜索"是对Mac整个磁盘的全局搜索,搜索起来极其便捷,但也常被使用者忽略使用. 以下列出比较常用的几个场景供使用者参考 场景一:文件在哪儿,要立即查看? 1.打开&q ...
- 在Windows上访问linux的共享文件夹
1. https://blog.csdn.net/weixin_44147924/article/details/123692155
- WEB/H5测试标准
- C#中Base64转换为byte[]再进行处理
byte[] arr = Convert.FromBase64String(temp.Substring(temp.IndexOf(",") + 1)); using (Strea ...
- (2)请用requests库的get()函数访问如下一个网站20次,打印返回状态,text()内容,计算text()属性和content属性所返回网页内容的长度。
# 导入库 import requests from bs4 import BeautifulSoup def getUrlText(url): try: web = requests.get(url ...
- ASP.NET Web应用程序(.NET Framework)开发网站
1.创建项目 2.控制器脚本说明 [FromBody]JObject value:JObject此类型默认为string,但是string无法正常解析复杂类型的Json数据,所以修改为JObject类 ...
- 【Linux 中断】红外接收器设备驱动
一.概述 现在很多家电都使用了红外,而智能家居的诞生,连音响都带了红外遥控功能.为了解决家里遥控器比较多的情况,多数手机都支持了红外功能,这和以前的万能遥控器一样.这里主要记录红外接收的驱动,当然明白 ...