python算法(1)抓交通肇事犯「建议收藏」

python算法(1)抓交通肇事犯「建议收藏」抓交通肇事犯1.问题描述一辆卡车违反交通规则,撞人后逃跑。现场有三人目击该事件,但都没有记住车号,只记下了车号的一些特征。甲说:牌照的前两位数字是相同的:乙说:牌照的后两位数字是相同的,但与前两位

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

抓交通肇事犯

 

1.问题描述

一辆卡车违反交通规则,撞人后逃跑。现场有三人目击该事件,但都没有记住车号,只记下了车号的一些特征。甲说:牌照的前两位数字是相同的:乙说:牌照的后两位数字是相同的,但与前两位不同:丙是数学家,他说:4位的车号刚好是一个整数的平方。请根据以上线索求出车号。
 

2.确定程序框架

python算法(1)抓交通肇事犯「建议收藏」
根据流程,构建程序框架如下:

if __name__ == '__main__':
    # i代表前两位车牌号数字,j代表后两位车牌号数字,k代表车牌号
    for i in range(10):
        for j in range(10):  # 穷举前两位和后两位车牌数字
            # 判断前两位和后两位数字是否相同
            if i != j:
                # 组成4位车牌号码
                k = 1000 * i + 100 * i + 10 * j + j
                # 判断k是否是某个数的平方,是就输出

 

3.判断车牌k是是否为某个数的平方,是就输出

再次利用循环来实现,循环变量 temp求平方后和车牌号k比较,相等则投到车牌号,优化算法,temp的初值应该从31开始,因为小于30的数的平方小于4位数。故该层循环为最内层循环,对每一个年牌号均作如此操作。

for temp in range(31, 100):
    if temp * temp == k:
        print("车牌号为:", k)

 

4.完整程序

根据上面的分析,完整程序如下:

if __name__ == '__main__':
    # i代表前两位车牌号数字,j代表后两位车牌号数字,k代表车牌号
    for i in range(10):
        for j in range(10):  # 穷举前两位和后两位车牌数字
            # 判断前两位和后两位数字是否相同
            if i != j:
                # 组成4位车牌号码
                k = 1000 * i + 100 * i + 10 * j + j
                # 判断k是否是某个数的平方,是就输出
                for temp in range(31, 100):
                    if temp * temp == k:
                        print("车牌号为:", k)

 

5.运行结果

Pycharm运行程序,结果如下

车牌号为: 7744

 

6.优化算法

针对上述程序,如果已经找到相应的车牌号,请读者考虑循环是否还需要继续呢?答案是肯定的,因为算法在设计穷举循环的时候,并没有在找到车牌的时候就退出循环,而是继续穷举其他ij的情况。我们可以改进算法,设置一个“标识变量”,该变量初值为0,一旦找到车牌号,则改变该标识变量的值为1,每次循环判断一下标识变量的值。如果值为1,则退出所有循环,这样能有效的减少循环次数,改进的程序如下:

if __name__=="__main__":
    # i代表前两位车牌号数字,j代表后两位车牌号的数字,k代表车牌号
    flog = 0  # 循环标识变量,为1时推出所有循环
    for i in range(10):
        if flog:
            break
        for j in range(10):  # 穷举前两位和后两位车牌数字
            if flog:
                break
            # 判断前两位和后两位数字是否相同
            if i != j:
                # 组成4位车牌号码
                k = 1000 * i + 100 * i + 10 * j + j
                # 判断k是否是某个数的平方,是就输出
                for temp in range(31, 100):
                    if temp * temp == k:
                        print("车牌号为: ", k)
                        flog = 1
                        break
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/165714.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何找到spring的官方文档[通俗易懂]

    如何找到spring的官方文档[通俗易懂]最近因为项目中遇到了一些问题,百度不到比较好的方案,就准备去看下spring的官方文档,在此记录下:1.进入springframework的官网项目页面:https://spring.io/projects/spring-framework2.点击文档,进入文档的htmlsingle模式页面,复制浏览器的地址如下图:3.地址栏的地址”https://d…

    2025年9月16日
    4
  • 守护线程与线程中断区别_守护线程和主线程

    守护线程与线程中断区别_守护线程和主线程1、主线程结束,守护线程也会提前结束执行。publicclassThreadDemo1extendsThread{ publicThreadDemo1(Stringname){ super(name); } @Override publicvoidrun(){ while(true){ System.err.println(getName()…

    2022年10月10日
    3
  • 秒杀多线程第六篇 经典线程同步 事件Event

    秒杀多线程第六篇 经典线程同步 事件Event阅读本篇之前推荐阅读以下姊妹篇:《秒杀多线程第四篇一个经典的多线程同步问题》《秒杀多线程第五篇经典线程同步关键段CS》 上一篇中使用关键段来解决经典的多线程同步互斥问题,由于关键段的“线程所有权”特性所以关键段只能用于线程的互斥而不能用于同步。本篇介绍用事件Event来尝试解决这个线程同步问题。首先介绍下如何使用事件。事件Event实际上是个内核对象,它的使用非常方便。下面列出一些常用的函数。

    2022年7月15日
    12
  • redux-saga学习

    redux-saga学习如果redux需要用到sideeffect异步操作,redux-thunk和redux-saga绝对是目前两个最受欢迎的中间件插件。redux-saga是一个用于管理redux应用异步操作的中间件,redux-saga通过创建sagas将所有异步操作逻辑收集在一个地方集中处理,可以用来代替redux-thunk中间件。

    2022年9月19日
    3
  • 一个wml的实例(原创)

    一个wml的实例(原创)

    2021年7月28日
    59
  • 电赛 | 循迹小车(省电赛一等奖作品)

    电赛 | 循迹小车(省电赛一等奖作品)点击上方「嵌入式大杂烩」,选择「置顶公众号」第一时间查看编程笔记!往期资料==菜单栏下有更多资料资源分享|嵌入式相关资源分享|编程语言类资源分享|Linux相关资料资源…

    2022年6月5日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号