输出回文数-第11届蓝桥杯选拔赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第23讲。

输出回文数,本题是2020年5月31日举办的第11届蓝桥杯青少组Python编程选拔赛真题,题目要求编程输出1到N(包含N)之间所有的回文数及总的个数。

先来看看题目的要求吧。

一.题目说明

提示信息:

一任意自然数n,若将n的各个位数倒序排列,所得到的数与n相等,例如:1234321倒序排列后仍为1234321,则称之为一个回文数。

编程实现:

用户输入一个正整数(N),输出1到N(包含N)之间所有的回文数及一共有多少个(注意:个数前边加"*")。

样例输入:

100

样例输出:

1

2

3

......

99

*18

评分标准:

  • 5分:能正确输出一组回文数及个数;

  • 10分:能正确输出两组回文数及个数;

  • 15分:能正确输出三组及三组以上回文数及个数。

二.思路分析

这是一道经典的数论问题,考查的知识点主要包括循环和字符串运算。

一个自然数,如果从左向右看和从右向左看数字都一样,换句话说,就是“数字排列左右对称”,就把它叫做“回文数”。

图片

比如121、5335、6084806都是回文数,当然,由同一个数字组成的数,如11,999也是回文数。

针对回文数的判断,方法比较多,最常用的有如下两种:

  • 字符串反转

  • 逐位判断

字符串反转的思路比较简单,就是将数字转成字符串,然后再利用Python的字符串切片运算得到逆序数字串,如果二者相等,就是回文数。

逐位判断的思路是以中间数字为对称点,看左右对称的两个数字是否相等, 如图:

图片

上图给出的数字个数是奇数的情况,中间的数字是孤立的,可以不用判断,如果数字个数为偶数,则刚好成对出现。

为了简化程序,我们可以定义一个函数,用于判断给定数字是否为回文数,返回结果是布尔值。

思路有了,接下来,我们就进入具体的编程实现环节。

三.编程实现

根据上面的思路分析,我们分两步来编写程序:

  • 定义函数判断回文数

  • 输出回文数及其个数

1. 定义函数判断回文数

我们先使用方案一,即字符串反转的方式,定义函数如下:

图片

代码非常简洁,这里使用了Python编程中的切片技巧,其用法如下:

str[start: stop: step]

其中:

  • start 表示切片的起始位置(默认为0,即字符串的开头)。

  • stop 表示切片的结束位置(默认为字符串的末尾)。

  • step 表示切片的步长,决定了我们每次取多远的字符。当步长为正数时,从左往右取字符;当步长为负数时,从右往左取字符。

在上面的代码中,我们使用 s[: : -1] 来切片,其中 start 和 stop 都没有指定,因此默认为字符串的开头和末尾,而 step 设为 -1,表示从字符串的最后一个字符开始,每次向前取一个字符,直到字符串的开头,这样就得到了反转的字符串。

接下来,我们再使用方案2,即逐位比较的方式来定义函数,代码如下:

图片

代码不多,简单说明3点:

1). 首先要找到字符串的中间位置,对于长度为奇数的字符串来说,中间位不用处理,所以需要使用整除运算;

2). 以mid为对称点,前后对称的两个数字,其下标之和为字符串长度 - 1,建议结合特例法来理解,比如12321数字串,其长度为5,第一位下标为0,最后一位下标为4,其和为4,第二位下标为1,倒数第二位下标为3,二者的和为4;

3). 一旦对称的两个数字不相等,肯定不是回文数,直接返回False,结束函数;如果循环执行完,都没有返回False,说明是回文数,直接返回True。

2. 输出回文数及其个数

接下来就可以对1到N之间的所有数字进行遍历,调用函数判断是否为回文数,如果是则输出该数字,并统计回文数的个数,其代码如下:

图片

这部分代码比较简单,强调3点:

1). 前面定义的两个函数,选择其中一个就可以了;

2). 在调用函数的时候,需要使用str()函数将i转成字符串;

3). 最后输出数量的时候,不要忘了”*“。

运行程序,输入100,结果如下:

图片

至此,整个程序就全部完成了,你也可以输入不同的数字来测试效果。

四.总结与思考

本题的分数为30分,代码在10行左右,涉及到的知识点包括:

  • 输入和输出处理;

  • 循环语句,主要for...in循环;

  • 字符串处理,尤其是切片技巧;

  • 函数的灵活使用;

题目难度中等,解决本题的关键是要找到回文数的特点,并找到判断回文数的方法。

在具体实现的时候,可以使用函数的编程思想将判断过程封装成一个函数,这样就可以把一个复杂问题拆分成两个简单的问题,从而简化代码,这样可以避免出现一些不必要的错误。

在对字符串进行反转操作时,用到了切片的编程技巧,这是Python的专用方法,简单而强大,这也是很多人都喜欢Python的原因,一定要熟练掌握哦。

超平老师给你留一道思考题,除了上面讲到的两种方法,还有没有其它方法,具体又是如何实现的呢?

你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。

如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄

需要源码的,可以移步至“超平的编程课”gzh。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据分析概述

数据分析概述 在当今数字化的时代,数据已经成为我们周围不可忽视的存在。从商业领域到医疗行业,从科学研究到政府治理,数据的涌现为我们提供了前所未有的信息资源。然而,要从这个庞大的信息海洋中获取有意义的见解并做出明智的决策…

OpenCV-14图片的四则运算和图片的融合

一、图片的四则运算 1. 加法运算 通过使用API add来执行图像的加法运算 cv2.add(src1, src2)需要再其中传入两张图片。 图片就是矩阵,图片的加法运算就是矩阵的加法运算。 因此加法运算中要求两张图的shape必须是相同的。 首…

2023我的编程之旅-地质人的山和水

引言 大家好,我是搞地质的。外行人有的说我们游山玩水,有的说我们灰头土脸,也有的说我们不是科学。 而我说,这是一门穷极一生青春,值得奉献的行业。这是一门贴近民生,又拥抱自然的学科。他的真理性在于探…

excel 插件:Rainbow Analyst Crack

一个插件中包含四种 EXCEL 审核工具检测并修复隐藏的电子表格错误 不要满足于更少,四种领先的电子表格审计工具合二为一 Rainbow Analyst(因其对颜色编码的独特强大使用而得名)结合了世界级电子表格审核功能的多个领域: Excel™ …

【Spring实战】14 Web表单校验

文章目录 1. 依赖2. 实体类3. 控制器4. 页面5. 启动6. 验证1)访问页面2)后台校验 7. 优点8. 代码详细总结 在 Web 应用中,表单是用户与后端交互的主要界面之一。为了确保数据的有效性和一致性,我们经常需要对提交的表单数据进行验…

一文教会git如何配置多SSH Key(Github+Gitlab)

一文教会git如何配置多SSH Key(GithubGitlab) 对于工作了的伙伴来说,大家经常会配置多个SSH Key: SSH拉取的仓库不会反复的要求输入github用户名密码来验证自己的身份需要将公司的Gitlab和个人的Github区分开 我这里以Mac电脑为例…

Debezium发布历史46

原文地址: https://debezium.io/blog/2019/02/05/debezium-0-9-0-final-released/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. Debezium 0.9.0.Final 发布 2019 年 2 月 5 日 作者: G…

matplotlib颜色合集——各种常见简单图形(上)

一、.颜色配图表 图文颜色引用:建站教程 - FINTHON 二、折线图 jupyter notebook 简介plot() 2.1折线图参数 plt.plot(*args, scalexTrue, scaleyTrue, dataNone, **kwargs) 2.2、参数介绍 x:X轴数据,列表或数组,可选。 y&a…

没有Kubernetes也可以玩转Dapr?

一、NameResolution组件 虽然Dapr提供了一系列的编程模型,比如服务调用、发布订阅和Actor模型等,被广泛应用的应该还是服务调用。我们知道微服务环境下的服务调用需要解决服务注册与发现、负载均衡、弹性伸缩等问题,其实Dapr在这方面什么都没…

【数据结构】二叉树(一)——树和二叉树的概念及结构

前言: 本篇博客主要了解什么是树,什么是二叉树,以及他们的概念和结构。 文章目录 一、树的概念及结构1.1 树的基本概念1.2 树的相关特征1.3 树的实现 二、二叉树的概念及性质2.1 二叉树的概念2.2 二叉树的性质 一、树的概念及结构 1.1 树的基本概念 树&…

Z-score 因子的深入思考

最新(2024 年 1 月)出版的 SC 技术分析(Techical Analysis of Stock & Commodities)的第 4 条文章给到了 Z-score,原文标题为《Z-score: How to use it in Trading》。今天的笔记,就借此机会&#xff0…

C++线程池的原理(画图)及简单实现+例子(加深理解)

1.为什么线程池会出现,解决什么问题? C线程池(ThreadPool)的出现主要是为了解决以下几个问题: 1.性能:创建和销毁线程都是相对昂贵的操作,特别是在高并发场景下,频繁地创建和销毁线…

ubuntu18.04安装MySQL

1.安装mysql服务器端 sudo apt-get -y install mysql-server(18.04/20.04不会提示输入密码,默认是没有密码) 2.安装mysql客户端 sudo apt-get -y install mysql-client3.安装mysql模块 sudo apt-get -y install libmysqlclient-dev4.验证是…

data.TensorDataset解析

data.TensorDataset 是 PyTorch 中的一个类,用于创建一个包含多个张量的数据集。这个类的主要作用是将输入的张量组合成一个数据集,使得在训练过程中可以方便地进行数据加载和迭代。 具体来说,TensorDataset 接受一系列的张量作为输入参数&a…

字符集字符编码

字符集 字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。而字符集(Character set)则是多个字符的集合。 简单的说,字符集就规定了某个文字对应的二进制数字存放方式…

springboot整合springbatch批处理

springboot整合springbatch实现批处理 简介项目搭建步骤 简介 项目搭建 参考博客【场景实战】Spring Boot Spring Batch 实现批处理任务,保姆级教程 步骤 1.建表 建表sql CREATE TABLE student (id int NOT NULL AUTO_INCREMENT,name varchar(100) NOT NULL C…

[C#]yolov8-onnx在winform部署手势识别模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 是一个 SOTA 模型,它建立在以前 YOLO 版本的成功基础上,并引入了新的功能和改进,以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新…

牛客网面试题知识点记录-03

1.题目讲解重写后子类调用父类的方法总结:当子类重写了父类方法A,父类方法直接调用被重写的父类方法后,调用的是子类的重写的父类方法A。 class Test {public static void main(String[] args) {System.out.println(new B().getValue());}st…

Java的并发修改异常

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

原生JS调用OpenAI GPT接口并实现ChatGPT逐字输出效果

效果&#xff1a; 猜你感兴趣&#xff1a;springbootvue实现ChatGPT逐字输出打字效果 附源码&#xff0c;也是小弟原创&#xff0c;感谢支持&#xff01; 没废话&#xff0c;上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><me…