python算法练习(1)抓交通肇事犯
抓交通肇事犯
1.问题描述
一辆卡车违反交通规则,撞人后逃跑。现场有三人目击该事件,但都没有记住车号,只记下了车号的一些特征。甲说:牌照的前两位数字是相同的:乙说:牌照的后两位数字是相同的,但与前两位不同:两是数学家,他说:4位的车号刚好是一个整数的平方。请根据以上线索求出车号。
2.确定程序框架
根据流程,构建程序框架如下:
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.优化算法
针对上述程序,如果已经找到相应的车牌号,请读者考虑循环是否还需要继续呢?答案是肯定的,因为算法在设计穷举循环的时候,并没有在找到车牌的时候就退出循环,而是继续穷举其他i
、j
的情况。我们可以改进算法,设置一个“标识变量”,该变量初值为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
python算法练习(1)抓交通肇事犯的更多相关文章
- 如何让Python爬虫一天抓取100万张网页
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 王平 源自:猿人学Python PS:如有需要Python学习资料的 ...
- 安装Python算法库
安装Python算法库 主要包括用NumPy和SciPy来处理数据,用Matplotlib来实现数据可视化.为了适应处理大规模数据的需求,python在此基础上开发了Scikit-Learn机器学习算 ...
- python算法(一)
python算法(一) 一.求数x的因子 x=100 divisors=()#初始化空的元组 for i in range(1,x): if x%i==0: divisors=divisors+(i, ...
- Python算法与数据结构--求所有子数组的和的最大值
Python算法与数据结构--求所有子数组的和的最大值 玄魂工作室-玄魂 玄魂工作室秘书 玄魂工作室 昨天 题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个 ...
- Python算法:推导、递归和规约
Python算法:推导.递归和规约 注:本节中我给定下面三个重要词汇的中文翻译分别是:Induction(推导).Recursion(递归)和Reduction(规约) 本节主要介绍算法设计的三个核心 ...
- python模块之HTMLParser抓页面上的所有URL链接
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python模块之HTMLParser抓页面上的所有URL链接 import urllib #MyParse ...
- python&php数据抓取、爬虫分析与中介,有网址案例
近期在做一个网络爬虫程序.后台使用python不定时去抓取数据.前台使用php进行展示 站点是:http://se.dianfenxiang.com
- Python算法(含源代码下载)
关键字:Python Algorithms Python算法 Mastering Basic Algorithms in the Python Language 使用Python语言掌握基本算法 P ...
- python算法题 python123网站单元四题目
目录 一:二分法求平方根 二:Collatz猜想 三:算24(只考虑满足,不考虑把所有情况找出来) 下面向大家介绍几个python算法题. 一:二分法求平方根 1.题目要求为 2.输入输出格式为 ...
随机推荐
- 【模拟8.01】matrix(DP杂题,思维题)
很神的题,感谢lnc大佬的指点. 先设1-LL[i]统称左区间,RR[i]-m为右区间 用L[i]统计从1-i列,出现的左区间端点的前缀和,R[i]是右区间.... f[i][j]中j表示当前在第i列 ...
- .NET Core/.NET5/.NET6 开源项目汇总5:权限管理系统项目
系列目录 [已更新最新开发文章,点击查看详细] 企业管理系统一般包含后台管理UI.组织机构管理.权限管理.日志.数据访问.表单.工作流等常用必备功能.下面收集的几款优秀开源的管理系统,值得大家 ...
- 如何回答面试中问到的Hibernate和MyBatis的区别
这边主要是写给那些准备去面试的(没什么经验的)应聘者看的,为了在面试中更好的回答这个问题,我做一个简单的梳理和总结. 作为一名职场新人,经历过多次的面试,由于在简历中提及了Hibernate和MyBa ...
- 入门Kubernetes - YAML文件
前言 前篇文章中简单了解到如何把.Net Core 程序部署到k8s中,过程中使用了多个*.yaml文件,那么这些文件的格式及含义.语法是如何的呢? 接下来,进一步了解学习 一.YAML介绍: 1.简 ...
- sql循环说明
while循环:主要是判断,不能使用表中的ID,临时表是ID自增的,通过自增ID可以查出表ID(语法简单,需要配合其他代码操作表ID)游标循环:可以使用表中的ID ,进行修改等操作(语法难一点,核心代 ...
- Redis配置统计字典
本章将对Redis的系统状态信息(info命令结果)和Redis的所有配置(包括Standalone.Sentinel.Cluster三种模式)做一个全面的梳理,希望本章能够成为Redis配置统计字典 ...
- kafka简单介绍
Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务.它主要用于处理活跃的流式数据. ...
- 8、ITSM基本概念(2)
6.流程和职能: 7.故障管理: (1)故障管理的输入和输出: (2)故障管理的目标: 优先解决影响度大的事件: (3)故障管理的指标: (4)故障管理的流程: 8.问题管理: (1)问题管理的输入和 ...
- C++ nullptr 和 NULL 的使用区别
1. 为什么会有nullptr的出现 目的:nullptr的出现主要是为了替代NULL. 那么,为什么要替代NULL呢? 在NULL的定义中存在会有2种方式,有的编译器会将NULL定义成0,有的编译器 ...
- layui 合计行不要边框
$(".layui-table-total div").attr('style','text-overflow:clip'); //合并合计行单元格 $(".layui- ...