2021年第十二届蓝桥杯省赛Python组(真题+解析+代码):直线

1 真题2021年第十二届蓝桥杯省赛Python组(真题+解析+代码):直线_第1张图片


2 解析

难度系数:⭐⭐

考察题型:枚举  数论

涉及知识点: 集合docker=set()  斜率截距公式(k,b)

思路分析:

一条普普通通的直线,竟然能变出这么多花样?直线,接招!( •̀ ω •́ )✧

首先创建二维列表存放坐标系,然后二重循环遍历,给每个坐标点赋初值。

因为要统计不同的直线,所以用直线的性质:斜率截距 来区分,并存放到集合容器里,

最后一点小细节,当斜率不存在时,k会报错,

所以单独计算,最后直接加上20条垂直x轴的直线。


3 代码

#直线
points=[[x,y] for x in range(20) for y in range(21)] #创建二维列表:代表xy坐标系
docker=set()                            #创建集合属性的容器:因为集合里的元素不会重复
for i in points:                        #二重循环遍历每个坐标
    x1,y1=i[0],i[1]                     #注意书写格式:a,b=c,d
    for j in points:
      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 docker:           #存入容器里没有的(斜率,截距)对
          docker.add((k,b))
print(len(docker)+20)                   #输出结果:容器的长度40237+斜率不存在的20种情况=40257

                


   我写的是关于蓝桥杯的系列题解,感谢关注我的朋友们,我会持续输出高质量文章   
                                                      
蓝桥杯python组十二届省赛真题+解析+代码(通俗易懂版)_编程有了思路-CSDN博客_蓝桥杯大赛python小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。小蓝想知道自己能从 1 拼到多少。例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10,但是拼 11 时卡片 1 已经只有一张了,不够拼出 11。现在小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 1拼到多少?https://blog.csdn.net/m0_55148406/article/details/122774029

你可能感兴趣的:(备战蓝桥杯,枚举模拟,数论,蓝桥杯,python,算法)