水仙花数-第12届蓝桥杯省赛Python真题精选

ops/2024/11/13 0:17:45/

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

水仙花数,本题是2021年4月24日举办的第12届蓝桥杯青少组Python编程省赛真题,第12届一共有两场省赛,这是第二场。题目要求对于给定的正整数N,编程计算100到N之间水仙花数量的个数。

先来看看题目的要求吧。

一.题目说明

提示信息:

“水仙花数”是指一个三位正整数,其各位数字立方的和等于该数本身。

例如:153是一个“水仙花数”,因为13+53+33等于153。

编程实现:

给定一个正整数N,判断100到N之间有多少个“水仙花数”。

输入描述:

输入一个正整数N(100 < N < 1000)

输出描述:

输出100到N之间(包含100和N)有多少个“水仙花数”

样例输入:

160

样例输出:

1

二.思路分析

这是一道经典的数论问题,考查的知识点主要包括循环、函数和枚举算法。

数学家们在研究数字立方和“黑洞”时,发现下面的等式:

图片

观察上述等式,可以发现,每个数字,从自身出发,又回到了自身,由于这种只钟爱自己的性质,人们称其为自恋数(narcissistic number)。

而水仙花数的名称来源于古代希腊神话中的美丽少年纳西索斯(Narcissus),他因为沉迷于自己的美貌而无法自拔,最终变成了一朵水仙花。

图片

判断水仙花的思路非常直观,将三位数进行分解,分别找出其个位、十位和百位上的数字,并计算它们的立方和,然后判断立方和是否等于三位数本身。

所以,这里的关键是如何拆分三位数,通常有如下两种方法:

  • 字符串方法

  • 数学方法

字符串相对比较简单,就是将数字先转成字符串,然后分别取出每一个字符,再转换成数字进行运算。

而数学方法则是利用除法,计算商和余数,从而得到个位、十位和百位。

题目要统计水仙花的个数,这就需要枚举100到n之间的所有整数,逐一判断。为了简化代码,可以定义一个函数,用于判断指定数字是否为水仙花数。

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

三.编程实现

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

  • 自定义函数

  • 循环统计

1. 自定义函数

根据前面的思路分析,我们有两种方法来获取三位数的个位、十位和百位。

先采取字符串的方式,定义函数如下:

图片

代码比较简单,说明两点:

1). 注意字符串和数字之间的转换,先将数字n转成字符串,遍历字符串时,再将每个字符转成数字;

2). 直接返回s == n的结果,这种写法更为简洁,如果二者相等,返回True,否则返回False。

接下来使用数学方法,定义函数如下:

图片

代码也比较简单,注意在进行除法运算时需要使用整除运算符//,而不是/。

2. 循环统计

有了自定义函数,接下来只需要循环统计即可,代码如下:

图片

代码非常简单,注意一点,题目要求统计的是100到n(包含100和n)之间的水仙花数,所以range()函数的两个参数分别是100和n + 1。

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

四.总结与思考

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

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

  • 条件语句;

  • 字符串和数字的转换;

  • 自定义函数;

本题难度一般,关键点在于如何获取三位数的个位、十位和百位,本题介绍了两种经典方案,分别是字符串方法和数学方法。

对于Python而言,字符串和数字的互相转换非常方便,用起来更为简单,也是首选方法。从编程的角度来讲,使用数学方法更加的通用,也更为灵活,所以我们必须熟练掌握这两种解决方案。

在数论中,水仙花数也被称为超完全数字不变数、自幂数、阿姆斯特朗数等。

自幂数用来描述一个N位非负整数,其各位数字的N次方和等于该数本身。水仙花数只是自幂数的一种,严格来说3位数的3次幂数才称为水仙花数。

其它位数的自幂数名字,如下:

一位自幂数:独身数两位自幂数:没有三位自幂数:水仙花数四位自幂数:四叶玫瑰数五位自幂数:五角星数六位自幂数:六合数七位自幂数:北斗七星数八位自幂数:八仙数九位自幂数:九九重阳数十位自幂数:十全十美数

超平老师给你留一道思考题,如何计算并输出所有的四叶玫瑰数,赶紧动手试试吧。

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

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

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


http://www.ppmy.cn/ops/15201.html

相关文章

Python语法糖大全

本文汇集了一些常用的Python语法糖&#xff0c;供大家查询使用。 1. 集合与序列操作 列表推导式&#xff1a;创建列表。[x**2 for x in range(10)]字典推导式&#xff1a;创建字典。{x: x**2 for x in range(10)}集合推导式&#xff1a;创建集合。{x**2 for x in range(10)}条…

外贸干货|真正的销售高手,都很会提问

你的产品性价比很高&#xff0c;为什么客户没有买单呢&#xff1f; 最重要的原因是你没有了解到他真正的需求。 真正的销售高手&#xff0c;应该是一个提问高手&#xff0c;至少要连续问对方6个问题&#xff0c;问出客户的真实需求。 假如他回答你的问题&#xff0c;你有一种&a…

ruoyi-nbcio-plus基于vue3的flowable修正加签与跳转的前端问题

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

如何保障企业核心应用系统的安全

在现代数字化时代&#xff0c;企业的应用系统扮演着至关重要的角色&#xff0c;它们承载着企业的核心业务逻辑、敏感数据以及与客户、合作伙伴之间的交互。因此&#xff0c;确保这些应用系统的安全性是至关重要的。为确保企业应用的安全性&#xff0c;许多公司在应用上线前会进…

书生·浦语大模型-第七节课笔记/作业

笔记 还没看到视频 但评测对于模型优化是非常重要的&#xff0c;指引了模型选择与优化的方向 评测过程 大海捞针&#xff1a; 通过将关键信息随机插入一段长文本的不同位置&#xff0c;形成大语言模型 (LLM) 的Prompt&#xff0c;通过测试大模型是否能从长文本中提取出关键…

使用FPGA实现比较器

介绍 比较器就是通过比较输入的大小&#xff0c;然后输出给出判断。 在这个比较器中&#xff0c;有两个输入&#xff0c;三个输出。根据输出就可以判断出哪个输入值大了。 设计文件 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; entity compa…

MATLAB使用速成 第六章(符号计算)

一、符号运算介绍 1、符号运算的特点 &#xff08;1&#xff09;符号运算以推理方式进行&#xff0c;不受计算误差累积所带来的困扰。 &#xff08;2&#xff09;符号计算可以给出完全正确的封闭解&#xff0c;或任意精度的数值解&#xff08;封闭解不存在时&#xff09;。 …

无法连接到MongoDB Atlas 的Cloud Database

打开Mongodb网页: 选择允许任何地址连接 连接成功