回文数个数-第12届蓝桥杯选拔赛Python真题精选

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

回文数个数,本题是2020年9月20日举办的第12届蓝桥杯青少组Python编程选拔赛真题。题目要求编程统计不同位数的回文数的个数。

先来看看题目的要求吧。

一.题目说明

编程实现:

求不同位数的回文数的个数。

用户输入一个正整数M(2 < M < 7),M作为回文数的位数,要求输出M位的回文数共有几个及这些回文数中有几个包含数字99。

输入描述:

输入一个正整数M

输出描述:

第一行输出回文数的个数

第二行输出M位的回文数中包含数字99的有几个

样例输入:

3

样例输出:

90

1

评判标准:

  • 7分:能正确输出一组数据;

  • 7分:能正确输出两组数据;

  • 8分:能正确输出三组数据;

  • 8分:能正确输出四组数据。

二.思路分析

这是一道简单的数论问题,研究的是回文数,考察的知识点包括循环语句、条件语句和字符串运算等

关于回文数问题,在第11届的选拔赛中出现过,可以参考《输出回文数-第11届蓝桥杯选拔赛Python真题精选》。

之前我们介绍了两种方法,第一种是字符串反转法,第二种逐位比较法,即根据回文数的对称特效进行逐位比较。

今天超平老师再介绍一种数学方法,就是将数字进行反转,然后再判断反转后的逆序数字和原数字是否相等。

比如,对于数字1221,反转后的数字为1221,二者相等,所以是回文数。再比如,对于数字1223,反转后的数字为3221,二者不相等,所以不是回文数。

如何将数字反转呢,这就涉及到拆位算法,对于任何一个整数,如果要获取最低位,只需要对10取余数即可, 然后再使用整除,去掉最低位。

举个例子,给定整数n = 168,第一次拆位过程如下:

第1步:取出个位,168 % 10 = 8第2步:去掉个位,168 // 10 = 16

经过第一次拆位,数字n变成了16,第二次拆位过程如下:​​​​​​​

第1步:取出个位,16 % 10 = 6第2步:去掉个位,16 // 10 = 1

经过第二次拆位,数字n变成了1,第三次拆位过程如下:​​​​​​​

第1步:取出个位,1 % 10 = 1第2步:去掉各位,1 // 10 = 0

此时,数字n变成了0,拆位结束。从这个过程中可以发现,如果需要最低位,就是n %10,如果需要去掉最低位的数字,就是n // 10。

一边拆位,另一边则需要重建,重建的过程就是不断地乘以10,再加上刚拆的这一位。假设m为反转后的数字,将m的初始值设为0,其重建过程如下:

第一次,我们拆出了8,重建如下:

m = m * 10 + 8 = 0 * 10 + 8 = 8

第二次,我们拆出了6,重建如下:

m = m * 10 + 6 = 8 * 10 + 6 = 86

第三次,我们拆出了1,重建如下: 

m = m * 10 + 1 = 86 * 10 + 1 = 861

这样,我们就可以得到168的逆序数字861了。

为了方便,我们可以将判断回文数的过程定义为一个函数,给定一个数字,如果是回文数就返回True,否则返回False。

除了统计所有回文数的个数外,还需要统计包含99的回文数有几个,这可以使用in运算符,不过需要将数字转成字符串。

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

三.编程实现

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

  • 定义函数判断回文数

  • 统计回文数个数

1. 定义函数判断回文数

根据前面的思路分析,我们定义函数如下:

图片

代码不多,强调两点:

1). 在拆位过程中,数字会变化,而最后需要和原数字比较,所以,这里借用变量k,来进行拆位,从而保证原数字n不变;

2). 在Python编程中,除法运算符有两个,分别是 / 和 //,此处应该使用//。

2. 统计回文数

有了ispalindrome()函数,接下来就可以循环判断了,编写代码如下:

图片

代码不难,简单说明两点:

1). 输入整数m后,需要计算m位数的最小值和最大值,比如m = 3,最小的三位数是100,最大的三位数是999,在计算start和end的时候,使用了**运算符;

2). 在判断是否包含数字99时,需要将99和数字i都转成字符串。

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

四.总结与思考

本题代码在20行左右,涉及到的知识点包括:

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

  • 条件语句,尤其是条件的嵌套;

  • 函数的定义及使用;

  • 拆位算法;

作为经典的回文数问题,实现方法有多种,本题给出了纯数学的解法,关键点在于拆位算法的理解和应用。

拆位是一种常见的基础算法,在编程中应用广泛,其核心是%和//两个运算符的组合。不过这个方法只针对数字有效,如果是字符串,就不能使用这个方法了。

除此之外,为了简化程序,我们采用了函数的编程思想,将回文数的判断过程封装成函数,这正是我们提倡的计算思维,当你具备了计算思维,解决问题的能力会上升一个台阶。

超平老师给你留一道思考题,针对本题采用的计算逆序数的方法,它的局限性有哪些,又该如何解决呢?

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

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

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

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

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

相关文章

Unity 学习日记 12.小球撞击冰块游戏

目录 1.准备场景 2.让小球动起来 3.用鼠标把小球甩出去 4.加入鼠标点击小球的判断 5.小球与冰块的碰撞测试 6.撞击后销毁冰块 ​编辑 7.显示游戏计时 8.显示扔球次数 9.显示剩余冰块个数 10.游戏结束 11.完整代码 下载源码 UnityPackage 最终效果&#xff1a; 1.准…

【氮化镓】位错对氮化镓(GaN)电子能量损失谱(EEL)的影响

本文献《Influence of dislocations on electron energy-loss spectra in gallium nitride》由C. J. Fall等人撰写&#xff0c;发表于2002年。研究团队通过第一性原理计算&#xff0c;探讨了位错对氮化镓&#xff08;GaN&#xff09;电子能量损失谱&#xff08;EEL&#xff09;…

八大排序之堆排序

堆排序算法思想&#xff1a; 堆排序是利用二叉树的原理&#xff0c;模拟二叉树将所求的数据放入存放树中&#xff0c;先将所有数据按照大根堆排列&#xff0c;排列之后再依次的给树按从小到大排列. 例如 2 5 44 21 11 6 1 9 我们将数据按照这样的二叉树的形式列举出来&#…

FPGA时钟资源详解(1)——时钟Buffer的选择

FPGA时钟系列文章总览&#xff1a;FPGA原理与结构&#xff08;14&#xff09;——时钟资源https://ztzhang.blog.csdn.net/article/details/132307564 目录 一、概述 二、时钟Buffer的选择 2.1 BUFG 2.2 BUFR 和 BUFIO 2.2.1 源同步接口的支持 2.2.2 扩展时钟域…

DREAM: A Dynamic Scheduler for Dynamic Real-time Multi-model ML Workloads——论文泛读

ASPLOS 2024 Paper 论文阅读笔记整理 问题 新兴的实时多模型ML&#xff08;RTMM&#xff09;工作负载&#xff0c;如AR/VR和无人机控制&#xff0c;涉及各种粒度的动态行为&#xff1a;任务、模型和模型中的层。这种动态行为给ML系统中的系统软件带来了新的挑战&#xff0c;与…

深度学习中不同学习率调整策略

1、StepLR 功能&#xff1a;固定等间隔调整学习率 主要参数&#xff1a; step_size:调整间隔数 gamma&#xff1a;调整系数 调整方式&#xff1a; l r l r ∗ g a m m a lrlr\ast gamma lrlr∗gamma 2、MultiStepLR 功能&#xff1a;按给定间隔调整学习率 主要参数&#xf…

Linux——磁盘与文件系统管理

目录 磁盘分区的表示 硬盘分区 分区类型 确认系统中的磁盘设备——fdisk 规划硬盘中的分区——fdisk 文件系统 文件系统类型&#xff1a; 在分区中创建文件系统——mkfs&#xff0c;mkswap 挂载文件系统 mount命令 umount命令 查看分区挂载情况 设置启动载入&…

负荷频率控制LFC,自抗扰ADRC控制,麻雀SSA算法优化自抗扰参数,两区域二次调频simulink/matlab

红色曲线为优化结果&#xff0c;蓝色曲线为没有自抗扰和没有优化的结果&#xff01;

Mac系统中使用VSCode安装C#开发环境进行编译调试

VSCode安装插件 C#c# Dev Kit 安装Mac版本 .net .net下载地址 查看安装结果 dotnet --list-sdksdotnet --info配置环境变量 open -e ~/.bash_profile添加如下内容 export DOTNET_ROOT/usr/local/share/dotnet export PATH$PATH:$DOTNET_ROOT终端重新加载配置文件 sourc…

原子激光器(原子激射器)可发射相干原子束 目前仍处于技术研究阶段

原子激光器&#xff08;原子激射器&#xff09;可发射相干原子束 目前仍处于技术研究阶段 原子激光器&#xff0c;也称为原子激射器&#xff0c;是一种能够产生原子激光的器件。原子激光由粒子组成&#xff0c;拥有频率和波长&#xff0c;原子激光器受激发射电磁波&#xff0c;…

顺丰接口接入-主要处理下单接口上电子面单上传问题

概述 最近接到一个需求&#xff0c;需要和顺丰接口对接。由于是第一次对接&#xff0c;就需要把所有的流程全部走一遍&#xff0c;从 注册到 关联API 以及代码测试&#xff0c;电子面单审核&#xff0c;上线&#xff0c;下面就分开来说明把。本来是想着偷懒来着&#xff0c;作…

Days 35 ElfBoard板对Java的支持

Java作为一种功能强大且广泛应用的编程语言&#xff0c;具有广泛的适应性和实用性。在ELF 1开发板上集成Java支持&#xff0c;无疑将赋予嵌入式开发者更广阔的选择空间&#xff0c;今天就为各位小伙伴详细解析如何在ELF 1开发板上成功部署和运行Java环境。 1.拷贝两个压缩包到E…

FME学习之旅---day14

我们付出一些成本&#xff0c;时间的或者其他&#xff0c;最终总能收获一些什么。 【FME-HOW-TO系列】13 通过重新采样修改栅格像元大小 除了使用RasterResampler转换器进行重采样的操作外&#xff0c;还需要了解不同的插值方法&#xff0c;各方法大概的不同。 可以参考ArcG…

计算机网络(二)物理层

物理层 一、通信基础1.奈氏准则、香农定理2.编码与调制3.电路交换、报文交换、分组交换 二、 传输介质、设备1.导向性传输介质&#xff1a;1.1双绞线1.2 同轴电缆1.3光纤 2.非导向性传输介质&#xff1a; 一、通信基础 信道带宽&#xff1a;信道能通过的最高频率和最低频率之差…

学浪视频提取

经过调查,学浪这个学习平台越来越多人使用了,但是学浪视频官方没有提供下载按钮,为了让这些人能够随时随地的观看视频,于是我钻研学浪视频的下载,终于研究出来了并且做成软件批量版 下面是学浪视频提取的软件,有需要的自己下载一下 链接&#xff1a;https://pan.baidu.com/s/…

Chrome之解决:浏览器插件不能使用问题(十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

[flask]http请求//获取请求头信息+客户端信息

在网站中查询请求头信息&#xff0c;可以通过以下操作进行 右键然后选择检查 进入改页面后选择文档&#xff0c;刷新一下页面就好了 获取所有的请求头信息 print(request.headers, type(request.headers)) 在flask模块中&#xff0c;使用上面的输出函数就可以查看到有关于请求…

软考高级架构师:云原生架构概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

企业计算机服务器中了mkp勒索病毒怎么办,mkp勒索病毒解密流程步骤

在网络技术飞速发展的今天&#xff0c;越来越多的企业走向了数字化办公模式&#xff0c;网络为企业的生产运营提高了效率&#xff0c;为企业带来了极大便利&#xff0c;但网络是一把双刃剑&#xff0c;在为人们提供便利的同时也会带来数据安全问题&#xff0c;网络数据安全一直…

There is no getter for property named ‘deleted‘

实体类在继承BaseEntity的时候,由于没填写deleted参数名导致mybatis报错 这时候要么改application.yml里的mybatis参数&#x1f447; 要么就将BaseEntity基类的delete上加个existfalse&#x1f447;(推荐)