IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> python蓝桥杯真题刷题打卡 | day7 -> 正文阅读

[数据结构与算法]python蓝桥杯真题刷题打卡 | day7

1. 直线

题目

在这里插入图片描述

解析

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

直接使用k斜率去计算b截距,会产生精度爆炸,也就是说,编译器会自动省略掉后几位数字,导致题目错误,最常见的错误答案如下:
在这里插入图片描述
公式推导如下:
在这里插入图片描述

代码

points = [(x,y) for x in range(20) for y in range(21)]
docker = set()

for x in points:
    for y in points:
        x1,y1 = x[0],x[1]
        x2,y2 = y[0],y[1]
        if x1!=x2 and y1!=y2: # 同一竖线和横线不做计算
            k = (y2-y1)/(x2-x1)
            b = (x2*y1-x1*y2)/(x2-x1)
            docker.add((k,b))

print(len(docker) + 20 + 21)

2. 路径

题目

在这里插入图片描述

解析

融合了最短路径,最小公倍数和动态规划。
其中 最小公倍数需要使用时间复杂度最低的,不能用while循环来找最小公倍数,亲测时间会很长。

最小公倍数数时间复杂度最低的模板:

# 最小公倍数模板(least common multiple)
def lcm(a,b):
    if a<b:
        a,b=b,a
    c,d=a,b
    while d!=0:
        c,d=d,c%d
    return (a*b)//c

关于动态规划的解析:
https://blog.csdn.net/lijiamingccc/article/details/123673506

这里动态规划的递推公式如下:
在这里插入图片描述
其中 dp[j] 是1到j位置 的路径长度,dp[i]+lcm(i,j) 从第i个结点经过lcm(i,j) 的距离到达j位置 的路径长度,两者取最小值

代码

# 最短路径(dp)
n=2021                          #结点数量
dp=[float('inf')]*(n+1)         #创建列表赋值为无穷大
dp[1]=0                         #结点1的长度初始化为0
for i in range(1,n+1):          #结点a:遍历结点1~n
    for j in range(i+1,i+22):   #结点b:遍历结点i+1~i+21
        if j>n:                 #j超出结点范围时
            break               #结束循环
        dp[j]=min(dp[j],dp[i]+lcm(i,j))#递推公式
print(dp[n])                    #输出结果:10266837

3. 双阶乘

题目

在这里插入图片描述

代码

送分题 无解析

sum_ = 1
for i in range(1,2022,2):
    sum_ = (sum_*i) %100000

print(sum_)

在这里插入图片描述

4. 几个2020

题目

在这里插入图片描述
常见错误示例
在这里插入图片描述

这里不正确的原因,主要是边界判断条件不一致,容易提前退出循环,导致统计不充分

代码

正确代码

#枚举-2020
a = [["2","2","0","0","0","0"],
    ["0","0","0","0","0","0"],
    ["0","0","2","2","0","2"],
    ["0","0","0","0","0","0"],
    ["0","0","0","0","2","2"],
    ["0","0","2","0","2","0"]]
cnt=0                   #计数器
n=len(a)                #长和宽一样长

for i in range(n):      #按行遍历
    for j in range(n-3):
        if a[i][j]=="2" and a[i][j+1]=="0" and a[i][j+2]=="2" and a[i][j+3]=="0":
            cnt+=1

for i in range(n-3):    #按列遍历
    for j in range(n):
        if a[i][j]=="2" and a[i+1][j]=="0" and a[i+2][j]=="2" and a[i+3][j]=="0":
            cnt+=1

for i in range(n-3):    #按对角线遍历
    for j in range(n-3):
        if a[i][j]=="2" and a[i+1][j+1]=="0" and a[i+2][j+2]=="2" and a[i+3][j+3]=="0":
            cnt+=1
            
print(cnt)              #输出结果:5
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:36:03  更:2022-04-04 12:39:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:56:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码