time = int(input())
time = time // 1000 # 题目说毫秒可以直接舍去
h = time // 3600 % 24 # 总时间除以3600可以得出一共有几个小时,避免超过24小时,所以还要对24除余求余数部分
m = time % 3600 // 60 # 总时间对3600除余的余数部分即为剩下的秒数,再整除60即可得到分钟数
s = time % 60 # 总时间除余60得到的就是秒数
print(“%02d:%02d:%02d” % (h,m,s)) # 题目要求不足两位数要补0,那么就能使用这种格式表示
=================================================================
💦💦这是一道填空题,但可以把它当做一道大题来做。题目的意思简单理解为 每个节点的距离是他们的最小公倍数,而节点与节点之间的编号之差不能大于21,最后求的是节点1到节点2021的最短距离。
💦💦 这里就涉及到了一个知识点——最小公倍数,为求最小公倍数,有个公式是 最小公倍数 = 两数乘积 / 最大公约数。而最大公约数可以使用辗转相除法求解。
💦💦 接着我们应该怎么做呢?这题可以用动态DP打表的方式得出答案。如果不清楚DP数组的朋友可以点击这里。提到DP我也说一下,最近几年蓝桥杯试题的难度增长趋势是非常明显的,因此动态DP应该是要成为我们的必备技能。(❗️❗️所以我强烈建议不了解DP数组的朋友把DP学会❗️❗️)
💦💦 如果你已经知道了如何使用动态规划的DP数组,那么这道题就变得容易起来,每个中间节点(假设是i)无非就两个动作:找到通往 i 节点的最近节点 和 确定 i 节点与下一节点的距离。
说完了中间部分的节点,现在就来说一下两边的节点,因为节点1是所有数的约数,那么它可以直接得出 2~22 的距离了,就是节点值本身。而最后一个数2021,它的动作就是判断在它的连接范围内哪个距离最短,哪个短就选哪个。
💦💦 我们先看一下二维DP的思路
试题D:路径 答案:10266837
最小公倍数LCM(least common multiple)的辗转相除法。
def lcm(a,b):
if a > b:
a,b = b,a
mul = a * b
不断用大的数除以小的数取余数部分直到最后能够整除为止。
while a > 0:
a,b = b % a, a
return mul// b
target = 2021
dp= [[float(“inf”)] * (target+1) for i in range(target+1)] # 创建列表的两种写法
初始化状态
for i in range(1,23): # 1能到的最远距离是22,因为22-1不大于21,所以这里右区间是23
dp[1][i] = i # 1 与 n 的最小公倍数必定是 n
for i in range(2,target+1): # 填表
从第i个数开始只填绝对值小于21的部分
for j in range(i,i+22):
当超出目标值2021时终止循环
if j > target:
break
当j等于i时,寻找上一个距离i最近的节点,第一个动作
if j == i:
寻找前面21范围以内的数,找出上一节点到i节点的最短路径
for k in range(1,22):
if i - k > 0:
取二者最小值
dp[i][j] = min(dp[i][j],dp[i-k][j])
else:
break
第二个动作就是确定i的上一节点到i的下一节点的距离
else:
dp[i][i]表示上一个节点到节点i的最短距离,然后上一节点又表示上上节点到该节点的距离,然后上上…
其实就是节点1到节点i的距离
lcm(i,j)表示i到下一节点的距离
dp[i][j]表示节点1到节点j的路径
dp[i][j] = lcm(i,j) + dp[i][i]
最后打印结果
print(dp[target][target])
💦💦对于二维DP而言,有些地方是可以优化的,可以一气呵成,将两个动作合并成一个动作,转换成一维DP。下面我们看一下代码实现。
试题D:路径 答案:10266837
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)
43c1008edf79.png)
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)