回文数个数-第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。

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

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

相关文章

macOS Sonoma如何查看隐藏文件

在使用Git进行项目版本控制时&#xff0c;我们可能会遇到一些隐藏文件&#xff0c;比如.gitkeep文件。它通常出现在Git项目的子目录中&#xff0c;主要作用是确保空目录也可以被跟踪。 终端命令 在尝试查看.gitkeep文件时&#xff0c;使用Terminal命令来显示隐藏文件 default…

推动制药行业数字化转型:基于超融合架构的MES一体机解决方案

随着中国对信息化重视程度的不断加深&#xff0c;制药行业作为国民经济的重要支柱之一&#xff0c;也在积极寻求通过数字化手段提升产业效率与产品质量。自党的十六大提出“以信息化带动工业化”的战略以来&#xff0c;制药业的这一转型探索尤为迫切。 在现代制药生产中&#…

C# OpenCv Haar、LBP 人脸检测

目录 效果 代码 下载 效果 代码 using OpenCvSharp;namespace OPenCVDemo {class Program{static void Main(string[] args){// Load the cascadesvar haarCascade new CascadeClassifier("haarcascade_frontalface_default.xml");var lbpCascade new Casca…

CSS(六)

一、精灵图 1.1 为什么需要精灵图 一个网页中往往会应用很多小的背景图像作为修饰&#xff0c;当网页中的图像过多时&#xff0c;服务器就会频繁地接收和发送请求图片&#xff0c;造成服务器请求压力过大&#xff0c;这将大大降低页面的加载速度。 因此&#xff0c;为了有效…

国外的Java面试题和国内的相比谁更卷

前言 有很多朋友很好奇国外的Java面试题长啥样&#xff0c;今天我们就去找5道国外的面试来和国内的对比一下看看谁难一些&#xff01; 面试题分享 1. Is Java Platform Independent if then how?&#xff08; Java平台是独立的吗&#xff1f;&#xff09; Yes, Java is a…

【氮化镓】位错对氮化镓(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;…

大话设计模式之迪米特法则

迪米特法则&#xff0c;也称为最少知识原则&#xff08;Law of Demeter&#xff09;&#xff0c;是面向对象设计中的一个重要原则&#xff0c;其核心思想是降低耦合度、减少对象之间的依赖关系&#xff0c;从而使系统更加灵活、易于维护和扩展。 根据迪米特法则&#xff0c;一…

librdkafka的简单使用

文章目录 摘要kafka是什么安装环境librdkafka的简单使用生产者消费者 摘要 本文是Getting Started with Apache Kafka and C/C的中文版&#xff0c; kafka的hello world程序。 本文完整代码见仓库&#xff0c;这里只列出producer/consumer的代码 kafka是什么 本节来源&#…

Python图像处理——计算机视觉中常用的图像预处理

概述 在计算机视觉项目中&#xff0c;使用样本时经常会遇到图像样本不统一的问题&#xff0c;比如图像质量&#xff0c;并非所有的图像都具有相同的质量水平。在开始训练模型或运行算法之前&#xff0c;通常需要对图像进行预处理&#xff0c;以确保获得最佳的结果。图像预处理…

StarRocks实战——多点大数据数仓构建

目录 前言 一、背景介绍 二、原有架构的痛点 2.1 技术成本 2.2 开发成本 2.2.1 离线 T1 更新的分析场景 2.2.2 实时更新分析场景 2.2.3 固定维度分析场景 2.2.4 运维成本 三、选择StarRocks的原因 3.1 引擎收敛 3.2 “大宽表”模型替换 3.3 简化Lambda架构 3.4 模…

jmeter总结之:Regular Expression Extractor元件

Regular Expression Extractor是一个后处理器元件&#xff0c;使用正则从服务器的响应中提取数据&#xff0c;并将这些数据保存到JMeter变量中&#xff0c;以便在后续的请求或断言中使用。在处理动态数据或验证响应中的特定信息时很有用。 添加Regular Expression Extractor元…

Git,GitHub,Gitee,GitLab 四者有什么区别?

目录 1. Git 2. GitHub 3. Gitee 4. GitLab 5. 总结概括 1. Git Git 是一个版本管理工具&#xff0c;常应用于本地代码的管理&#xff0c;下载完毕之后&#xff0c;我们可以使用此工具对本地的资料&#xff0c;代码进行版本管理。 下载链接&#xff1a; Git - Downlo…

Micron 256 GB DDR5-8800 MCR DIMM:适用于大型服务器的大型内存

美光本周宣布&#xff0c;它已经开始对其 256 GB multiplexer combined &#xff08;MCR&#xff09; DIMM 进行采样&#xff0c;这是该公司迄今为止容量最大的内存模块。这些全新的基于 DDR5 的 MCRDIMM 面向下一代服务器&#xff0c;特别是那些由英特尔至强可扩展“Granite R…

最小可行产品需要最小可行架构——可持续架构(三)

前言 最小可行产品&#xff08;MVP&#xff09;的概念可以帮助团队专注于尽快交付他们认为对客户最有价值的东西&#xff0c;以便在投入大量时间和资源之前迅速、廉价地评估产品的市场规模。MVP不仅需要考虑产品的市场可行性&#xff0c;还需要考虑其技术可行性&#xff0c;以…

车载以太网AVB交换机 gptp透明时钟 8口 千兆/百兆可切换 SW1100TR

SW1100车载以太网交换机 一、产品简要分析 8端口千兆和百兆混合车载以太网交换机&#xff0c;其中包含2个通道的1000BASE-T1采用罗森博格H-MTD接口&#xff0c;5通道100BASE-T1泰科MATEnet接口和1个通道1000BASE-T标准以太网(RJ45接口)&#xff0c;可以实现车载以太网多通道交…

Switch 和 PS1 模拟器:3000+ 游戏随心玩 | 开源日报 No.174

Ryujinx/Ryujinx Stars: 26.1k License: MIT Ryujinx 是用 C# 编写的实验性任天堂 Switch 模拟器。 该项目旨在提供出色的准确性和性能、用户友好的界面以及稳定的构建。它已经通过了大约 4050 个测试&#xff0c;其中超过 4000 个可以启动并进入游戏&#xff0c;其中大约 340…

7、鸿蒙学习-共享包概述

HarmonyOS提供了两种共享包&#xff0c;HAR&#xff08;Harmony Archive&#xff09;静态共享包&#xff0c;和HSP&#xff08;Harmony Shared Package&#xff09;动态共享包。 HAR与HSR都是为了实现代码和资源的共享&#xff0c;都可以包含代码、C库、资源和配置文件&#xf…

java算法day37 | 贪心算法 part06 ● 738.单调递增的数字 ● 968.监控二叉树

738.单调递增的数字 思路&#xff1a; 从后向前遍历&#xff0c;如果前一个数比后一个数大&#xff0c;则前一个数-1&#xff0c;后面的数都变成9. 思路不难&#xff0c;但实现的代码还是有一点繁琐的。 以下是用List实现的代码。 class Solution {public int monotoneIncrea…

【python分析实战】成本:揭示电商平台月度开支与成本结构占比 - 过于详细 【收藏】

重点关注本文思路&#xff0c;用python分析&#xff0c;方便大家实验复现&#xff0c;代码每次都用全量的&#xff0c;其他工具自行选择。 全文3000字&#xff0c;阅读10min&#xff0c;操作1小时 企业案例实战欢迎关注专栏 每日更新&#xff1a;https://blog.csdn.net/cciehl/…

uniapp输入框事件(防抖)

一、描述 在输入框输入内容或者说输入关键词的时候&#xff0c;往往都要进行做防抖处理。如果不做防抖&#xff0c;你输入什么&#xff0c;动态绑定的数据就会保持一致。这样不好吗&#xff0c;同步获取。有个业务场景&#xff0c;如果是搜索框&#xff0c;你每次一个字符&…