题目 :

代码:

#直线
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组真题-直线(细节+分析+代码)的更多相关文章

  1. 第七届蓝桥杯javaB组真题解析-分小组(第四题)

    题目 /* 分小组 9名运动员参加比赛,需要分3组进行预赛. 有哪些分组的方案呢? 我们标记运动员为 A,B,C,... I 下面的程序列出了所有的分组方法. 该程序的正常输出为: ABC DEF G ...

  2. 第七届蓝桥杯javaB组真题解析-煤球数目(第一题)

    题目 /* 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有 ...

  3. 第七届蓝桥杯javaB组真题解析-四平方和(第八题)

    题目 /* 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1 ...

  4. 第七届蓝桥杯javaB组真题解析-剪邮票(第七题)

    题目 /* 剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色 ...

  5. 第七届蓝桥杯javaB组真题解析-方格填数(第六题)

    题目 /* 方格填数 如下的10个格子 +--+--+--+ | | | | +--+--+--+--+ | | | | | +--+--+--+--+ | | | | +--+--+--+ (如果显 ...

  6. 第七届蓝桥杯javaB组真题解析-凑算式(第三题)

    题目 /* 凑算式 B DEF A + --- + ------- = 10 C GHI (如果显示有问题,可以参见[图1.jpg]) 这个算式中A~I代表1~9的数字,不同的字母代表不同的数字. 比 ...

  7. 第七届蓝桥杯javaB组真题解析-生日蜡烛(第二题)

    题目 /* 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填写他开始 ...

  8. 第七届蓝桥杯javaB组真题解析-抽签(第五题)

    题目 /* 抽签 X星球要派出一个5人组成的观察团前往W星. 其中: A国最多可以派出4人. B国最多可以派出2人. C国最多可以派出2人. .... 那么最终派往W星的观察团会有多少种国别的不同组合 ...

  9. Python解答蓝桥杯省赛真题之从入门到真题(二刷题目一直更新)

    蓝桥刷题 原文链接: https://github.com/libo-sober/LanQiaoCup Python解答蓝桥杯省赛真题之从入门到真题 不同字串 """ 一 ...

  10. 第四届蓝桥杯 c/c++真题

    第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们 ...

随机推荐

  1. CMake指定的任务可执行文件"cmd.exe" 未能运行。System.IO.IOException:未能创建临时文件。临时文件夹已满或其路径不正确。对路径"......exec.cmd "的访问被拒绝

    我觉得是我使用VS2022的原因,网上也没有找到相同的问题.

  2. celery工作原理和代码

    1.celery介绍 pip install celery == 4.4.7 pip install redis == 3.5.3 pip install eventlet == 0.26.1 Cel ...

  3. Conda 创建、激活、克隆、删除虚拟环境 - 搬运

    Conda 创建.激活.克隆.删除虚拟环境 转自 :https://zhuanlan.zhihu.com/p/547724114 风影忍着   通常来说,对于每一个新的项目,我们都需要创建一个新的环境 ...

  4. SHELL-反弹shell

    什么是shell? 在我们深入了解发送和接收 shell 的复杂性之前,了解 shell 实际上是什么很重要.用最简单的术语来说,shell 就是我们在与命令行环境 (CLI) 交互时使用的工具.换句 ...

  5. Matlab笔记--Matlab基础

    Matlab基础 数据类型(共有15种数据类型) 整数 取整函数 浮点数(单精度浮点数和双精度浮点数--默认为双精度浮点数) 复数 数据的显示格式(format确定数据的显示格式): 数据格式经过改变 ...

  6. Axios的js文件的下载教程+相关应用

    下载教程来啦! 1.进入GitHub网站,网址在这里:http://github.com 2.去搜索框搜索Axios,得到如下界面: 3.然后选择这里: 会出现如下界面: 4.点击右方的绿色按钮&qu ...

  7. GCC编译器编译过程

    GCC编译器编译过程 #生成test可执行文件 g++ test.cpp -o test 其实,上述命令可以分解为以下几个步骤 1. 预处理-Pre-Processing # -E 选择指示编译器仅对 ...

  8. ovs-dpdk:revalidator源码解析

    revalidator是做什么的?需要知道哪些东西? 有关于revalidator需要弄明白的是以下三个问题: 通过ovs-vsctl list open_vs可以看到other_config里面有两 ...

  9. Linux & 标准C语言学习 <DAY2>

    vim文本编辑器:     可以直接在终端下采用纯键盘操作的一款文本编辑器,号称编辑器之神,可以二次升级.可以扩展     基础用法:         1.进入vim:             输入 ...

  10. 【单元测试】Junit 4(八)--junit4 内置Rule

    1.0 Rules ​ Rules允许非常灵活地添加或重新定义一个测试类中每个测试方法的行为.测试人员可以重复使用或扩展下面提供的Rules之一,或编写自己的Rules. 1.1 TestName ​ ...