【每日一题】备战冲击蓝桥杯国赛——Python程序设计 | Day12 | 直线 | 真题代码解析
【摘要】 今天是2021年省赛的第二题,大家加油啊!~每天刷一道题,话不多说,先刷近两年的题吧,从2020的开始,如果有一起的可以加入我们!!!一起来刷题,冲击国赛!!!扫码 我的主页 网页左边下方 群二维码。加入方式:可以在下方的微信名片加我,然后拉你入群。(记得备注暗号:我要拿国奖) 2021年第十二届蓝桥杯赛题总览2020年的题就是这些,类型分为两种,分别是结果填空和程序设计,我们每天刷一道题,...
今天是2021年省赛的第二题,大家加油啊!~
每天刷一道题,话不多说,先刷近两年的题吧,从2020的开始,如果有一起的可以加入我们!!!
一起来刷题,冲击国赛!!!
扫码 我的主页 网页左边下方 群二维码。
加入方式:可以在下方的微信名片加我,然后拉你入群。(记得备注暗号:我要拿国奖)
2021年第十二届蓝桥杯赛题总览
2020年的题就是这些,类型分为两种,分别是结果填空和程序设计,我们每天刷一道题,省赛没问题!
直线 (题目)
(本题总分:5分)
官方练习系统:https://www.lanqiao.cn/problems/1449/learning/
—>【问题描述】
—>【结果描述】
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
解析
通过阅读题干,本题——难度一般:⭐⭐
考察类型:枚举、数论、哈希表
考察知识点:斜率、集合、截距
分析:
根据题干来看,规则为在二维坐标系上固定区域内的坐标点,二点成一条直线。
- 我们首先需要创建一个二维列表,用于存放坐标系,然后再遍历循环,为每个坐标系赋初值。
- 针对不同直线的区分,我们使用斜率和截距对每一根直线进行区分,再将其对应的值存放在Docker里面。
- 垂直x轴的直线共有20条,垂线的斜率为0,由此在2中的计算排除。
下面直接开干!!!
代码
Python代码实现:
法一:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2022/3/6 18:33
# @Author : 府学路18号车神
# @Email :yurz_control@163.com
# @File : Day12.py
axis = [[x, y] for x in range(20) for y in range(21)] # 首先创建一个二维矩阵,代表xy坐标系
docker = set() # 设置一个容器集合,哈希表
for location in axis: # 第一次遍历坐标系,取一个点
x1, y1 = location[0], location[1] # 取到第一个点的x、y坐标值
for place in axis:
x2, y2 = place[0], place[1] # 取到第二个点的x、y坐标值
# 首先排除垂直的情况, 当x值为相同时,则代表垂直
if x1 == x2:
continue
# 求取两点之间直线的斜率k,截距b
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) # 直接计算容器内的长度,然后再加上垂直的部分,可得: 40257
示例1:
法二:
import os
import sys
# 请在此输入您的代码
a = set()
for i in range(20):
for j in range(21):
for k in range(20):
for l in range(21):
if l==j or k==i:
continue
ki=(l-j)/(k-i)
b=(k*j-i*l)/(k-i)
a.add((ki,b))
print(len(a)+20+21)
速度都很快哦~
可以得出最终的结果为:40257
今天2021年省赛第二题,加油!
由此,我们可以快速得出结果,验证完毕!
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)