Python算法100例-2.3 求车速

2024-02-24 11:28
文章标签 python 算法 100 2.3 车速

本文主要是介绍Python算法100例-2.3 求车速,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

完整源代码项目地址,关注博主私信'源代码'后可获取

  • 1.问题描述
  • 2.问题分析
  • 3.算法设计
  • 4.确定程序框架
  • 5.完整的程序
  • 6.问题拓展

1.问题描述

一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859。两小时后里程表上出现了一个新的对称数,该数仍为5位数。问该车的速度是多少?新的对称数是多少?

2.问题分析

根据题意,司机在上午10点看到里程表上的读数是一个对称数95859,两小时后里程表上出现的新的对称数必然大于95859。因此,假设所求对称数为i,并设其初值为95860,即从95860开始检测,使i的取值依次递增。

对于i的每一次取值都将其进行分解,然后将对称位置上的数字进行比较,即第1位和第5位比较,第2位和第4位比较。如果每个处于对称位置上的数都是相等的,则可以判断出当前的i中所存放的5位数即为里程表上新出现的对称数。

3.算法设计

根据问题分析可知,i需要从95860开始试探,因此显然需要使用循环结构。在循环体中完成分解5位数并保存、再检测是否为对称数的功能。

根据问题分析可知,需要对一个5位数进行分解并保存,因此可以使用数组来保存分解后生成的5个数字。这样,在进行对称位置上的数字比较时,实际上进行的是指定下标的数组元素的比较。

4.确定程序框架

由上述分析可知,程序的主体是一个循环结构。

(1)循环试探

使用for语句进行循环试探,代码如下:

# 以95860为初值,循环试探
# i为里程数初始值,因最后结果仍是5位数,故最大值为100000
for i in range(95860, 100000):# 循环体语句

根据题意表述,两小时后里程表上出现了一个新的对称数,该数仍为5位数,故最大的循环次数是100000,而起始里程数是95860。

(2)分解5位数并保存

对当前变量i中存放的5位数进行分解,并将结果保存在数组a中。第1次分解出“万”位上的数字,存放在数组元素a[0]中;第2次分解出“千”位上的数字,存放在数组元素a[1]中;接着依次分解出“百”“十”“个”位上的数字,分别存放在数组元素a[2]、a[3]和a[4]中。代码如下:
# 从高到低分解当前i中保存的5位数,并顺次存放在数组元素a[0]~a[4]中
t = 0                          # 列表a的下标
k = 100000
while k >= 10:a[t] = (i % k)//(k // 10)  # 保存分解后的数字k /= 10t += 1

(3)判断是否为对称数

分解出的5个数字按照从低位到高位的顺序分别保存在数组元素a[0]~a[4]中。因此,判断该5位数是否为对称数的条件为:a[0]==a[4] and a[1]==a[3]是否成立。

if a[0] == a[4] and a[1] == a[3]:print("里程表上出现的新的对称数为:%d%d%d%d%d" %(a[0],a[1],a[2],a[3],a[4]))print("该车的速度为:%.2f" %((i-95859)/2.0))break                 # 跳出循环

上面的if语句中使用了break语句来跳出循环试探过程,即一旦找到一个对称的5位数,则立即跳出循环,这保证了经过有限次循环后程序可以正常结束。

程序流程图如图所示。

在这里插入图片描述

5.完整的程序

根据上面的分析,编写程序如下:

%%time
# 求车速
if __name__=="__main__":a = [0, 0, 0, 0, 0]                             # 列表a用来存放分解后的5个数字# i为里程数初始值,因最后结果仍是5位数,故最大值为100000for i in range(95860, 100000):# 从高到低分解当前i中保存的5位数,并顺次存放在数组元素a[0]~a[4]中t = 0                                                       # 列表a的下标k = 100000while k >= 10:a[t] = (i % k)//(k // 10)       # 保存分解后的数字k /= 10t += 1if a[0] == a[4] and a[1] == a[3]:print("里程表上出现的新的对称数为:%d%d%d%d%d" %(a[0],a[1],a[2],a[3],a[4]))print("该车的速度为:%.2f" %((i-95859)/2.0))break                                           # 跳出循环
里程表上出现的新的对称数为:95959
该车的速度为:50.00
CPU times: user 436 µs, sys: 17 µs, total: 453 µs
Wall time: 449 µs

6.问题拓展

该程序的主体是一个循环结构,使用了for语句进行循环试探,i是循环变量,初值为95860,代码如下:

# 以95860为初值,循环试探
# i为里程数初始值,因最后结果仍是5位数,故最大值为100000
for i in range(95860, 100000):# 循环体语句

也可以使用while循环结构来替代上面的for循环。在进入while循环前要先设置i的初值为95860,while循环的条件为永真,因此,在循环体中要有退出循环的条件。完整的代码如下:

%%time
# 求车速if __name__=="__main__":a = [0, 0, 0, 0, 0]                                     # 列表a用来存放分解后的5个数字i = 95860                                                               # i为里程数初始值while 1:# 从高到低分解当前i中保存的5位数,并顺次存放在数组元素a[0]~a[4]中t = 0                                                               # 列表a的下标k = 100000while k >= 10:a[t] = (i % k)//(k // 10)               # 保存分解后的数字k /= 10t += 1if a[0] == a[4] and a[1] == a[3]:print("里程表上出现的新的对称数为:%d%d%d%d%d" %(a[0],a[1],a[2],a[3],a[4]))print("该车的速度为:%.2f" %((i-95859)/2.0))break                                                   # 跳出循环i += 1
里程表上出现的新的对称数为:95959
该车的速度为:50.00
CPU times: user 474 µs, sys: 0 ns, total: 474 µs
Wall time: 479 µs

从上面的代码中可以看到,除了将for循环改为while循环以外,循环体中的语句没有变化,当找到新的对称数以后,就可以使用break语句跳出while循环了。

这篇关于Python算法100例-2.3 求车速的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/741951

相关文章

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e