Python算法100例-2.3 求车速

news2024/9/21 17:33:01

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

  • 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 /= 10
    t += 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位数,故最大值为100000
    for i in range(95860, 100000):
        # 从高到低分解当前i中保存的5位数,并顺次存放在数组元素a[0]~a[4]中
        t = 0                                                       # 列表a的下标
        k = 100000
        while k >= 10:
            a[t] = (i % k)//(k // 10)       # 保存分解后的数字
            k /= 10
            t += 1
        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                                           # 跳出循环


里程表上出现的新的对称数为: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 = 100000
        while k >= 10:
            a[t] = (i % k)//(k // 10)               # 保存分解后的数字
            k /= 10
            t += 1
        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                                                   # 跳出循环
        i += 1
里程表上出现的新的对称数为:95959
该车的速度为:50.00
CPU times: user 474 µs, sys: 0 ns, total: 474 µs
Wall time: 479 µs

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1468559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决vscode每次git pull/push都需要输入账号密码

git如何设置用户名 邮箱 密码 //设置用户 git config --global user.name "xxx"//设置邮箱 git config --global user.email "xxxxxx.com"//设置密码 git config --global user.password "xxxxx"解决每次git pull/push操作都需要输入密码 git …

【安卓基础3】Activity(一)

🏆作者简介:|康有为| ,大四在读,目前在小米安卓实习,毕业入职 🏆本文收录于 安卓学习大全,欢迎关注 🏆安卓学习资料推荐: 视频:b站搜动脑学院 视频链接 &…

VMware虚拟机从一台电脑复制到另一台电脑

1 概述 在一台电脑上利用虚拟机安装了OS系统,特别是如果虚拟机中的系统进行了各种繁琐的配置,因为换电脑或者需要在其他电脑上配置,这个时候就可以将虚拟机中的系统复制拷贝一份到新电脑上,省时省力。 2 操作步骤 2.1 vmx文件 …

Mac OS 搭建C++开发环境【已解决】

Mac OS 搭建C开发环境 文章目录 Mac OS 搭建C开发环境一、安装命令行工具:二、安装vscode三、安装gcc3.1 安装Homebrew3.2 安装gcc3.3 修改配置 四、更改VSCode默认编译器五、安装gdb六、安装Cmake && git七、编译运行 本地环境: Mac OS Sonoma …

LabVIEW高效核磁测井仪器多线程优化

LabVIEW高效核磁测井仪器多线程优化 为提高核磁测井仪器的测试效率与性能,开发了基于LabVIEW的多线程优化模型。该研究针对传统的核磁测井仪器软件,在多任务调度测试和并行技术需求上存在的效率不高和资源利用率低的问题,提出了一个多线程优…

算法沉淀——穷举、暴搜、深搜、回溯、剪枝综合练习一(leetcode真题剖析)

算法沉淀——穷举、暴搜、深搜、回溯、剪枝综合练习一 01.全排列02.子集03.找出所有子集的异或总和再求和04.全排列 II05.电话号码的字母组合 01.全排列 题目链接:https://leetcode.cn/problems/permutations/ 给定一个不含重复数字的数组 nums ,返回其…

二十六、直方图均衡化

项目功能实现&#xff1a;对灰度图片进行直方图均衡化操作 按照之前的博文结构来&#xff0c;这里就不在赘述了 一、头文件 histogram_equal.h #pragma once#include<opencv2/opencv.hpp>using namespace cv;class HISTOGRAM_EQUAL { public:void histogram_equal(Mat…

公众号怎么线上公证?

公众号迁移有什么作用&#xff1f;只能变更主体吗&#xff1f;公众号迁移的作用可不止变更主体这一个哦&#xff01;还可以把 A 账号的粉丝、文章素材、违规记录等迁移到 B 账号上。这样一来&#xff0c;你就可以在不失去原有粉丝的情况下&#xff0c;更好地管理和运营公众号啦…

【MySQL】连接查询和自连接的学习和总结

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-x4sPmqTXA4yupW1n {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

idea 2022.3 配置svn插件

配置中遇到的问题 1.没有安装svn.exe这个 原本是安装了TortoiseSVN 但没有安装客户端命令需要补充这个客户端命令的安装 才能引用 2.路径引用的问题 原本是在 D:\Program Files\TortoiseSVN 这里存在空格 会产生问题 网上说的使用progra~1 或者 加双引号 均不能成功 最…

SolidWorks的使用笔记

K因子 成型工具 自己设计的成型工具零件&#xff0c;保存文件类型为&#xff1a;

Servlet实现图片的上传和显示

本篇文章是在上一篇文章上改进而来 一、图片上传需要引用的jar包 链接&#xff1a;https://pan.baidu.com/s/17FLjlWlNEG5YnS_dl3C8WA 提取码&#xff1a;wbis 二、最后的结果 三、更改数据库增加图片路径字段path 四、前端页面增加图片上传按钮,和上传的复选框 代码 上传…

[c++] 工厂模式 + cyberrt 组件加载器分析

使用对象的时候&#xff0c;可以直接 new 一个&#xff0c;为什么还需要工厂模式 &#xff1f; 工厂模式属于创建型设计模式&#xff0c;将对象的创建和使用进行解耦&#xff0c;对用户隐藏了创建逻辑。 个人感觉上边的表述并没有说清楚为什么需要使用工厂模式。因为使用 new 创…

达尔克仪器设备邀您观摩2024生物发酵产品与技术装备展

参展企业介绍 达尔克本着“诚信、求精、协作、创新”的企业精神&#xff0c;以专业的技术、优良的品质和完善的服务&#xff0c;与广大客户共创辉煌未来。 我们的产品——包括水质分析、压力、温度、流量、物位等工业在线过程控制仪表、其他类型传感器以及自动化控制方案——全…

HTTPS原理及配置

HTTPS 1. 对称加密和非对称加密2. 加密算法&#xff08;了解&#xff09;3. HTTPS 协议介绍4. HTTPS 原理4.1. HTTP 访问过程4.2. HTTPS访问过程4.3. HTTPS 总结4.4. CA 证书认证机构 HTTPS 基本原理 HTTPS&#xff08;全称&#xff1a;HyperText Transfer Protocol over Secur…

模型 HBG(品牌增长)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_总纲目录。品牌增长法。 1 HBG(品牌增长)模型的应用 1.1 江小白使用HBG模型提高品牌知名度和销售额 选择受众市场&#xff1a;江小白的目标客户是年轻人&#xff0c;他们喜欢简单、时尚的产品。因此&#xff0c;江…

【最新Dubbo3深入理解】Dubbo3源码中的一些小技巧

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

如何用 Screen Studio 灵活高效录制可复用的教学视频?

如果你跟我一样&#xff0c;录制视频是高频刚需&#xff0c;那你不难体会到它对用户痛点的理解和解决。 挑战 作为一名教师兼 UP 主&#xff0c;我经常录制视频。 之前录制教程类视频&#xff0c;我往往采用自己的标准「懒人法」—— 从头到尾&#xff0c;用 OBS 录制屏幕和摄像…

R语言空间分析、模拟预测与可视化

随着地理信息系统&#xff08;GIS&#xff09;和大尺度研究的发展&#xff0c;空间数据的管理、统计与制图变得越来越重要。R语言在数据分析、挖掘和可视化中发挥着重要的作用&#xff0c;其中在空间分析方面扮演着重要角色&#xff0c;与空间相关的包的数量也达到130多个。在本…

Facebook群控:利用代理IP克服多账号关联

拥有多个 Facebook 帐户对于区分您的个人和企业在线形象或维护客户页面非常有用。然而&#xff0c;Facebook 的服务条款正式限制用户只能使用一个个人帐户&#xff0c;想要多账号运营&#xff0c;下面的干货必须看&#xff01; 一、Facebook群控是什么&#xff1f; Facebook群…