判断自守数-第13届蓝桥杯选拔赛Python真题精选

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

判断自守数,本题是2022年1月22日举办的第13届蓝桥杯青少组Python编程选拔赛真题编程部分第3题。题目要求对于给定的正整数,判断它是否为自守数,并输出字母"Y"和"N"。

先来看看题目的要求吧。

一.题目说明

提示信息:

一个正整数的平方的尾数一位或者几位数等于这个正整数,称为自守数

如:正整数 5 的平方为 25,25 的尾数一位是 5;

正整数 25 的平方为 625,625 的尾数两位是 25。

编程实现:

给定一个正整数,判断这个正整数是否为自守数,如果是输出大写字母“Y”,否者输出大写字母“N”。

注:1 为自守数

输入描述:

输入一个正整数

输出描述:

判断这个正整数是否为自守数,如果是输出大写字母“Y”,否者输出大写字母“N”

样例输入:

5

样例输出:

Y

二.思路分析

这是一道简单的数论题,涉及的知识点包括数学运算和字符串处理等。

自守数,亦称同构数,是指一个数的平方的尾数等于该数自身的自然数,先来看一组自守数吧:

5: (5) ^ 2 = 256: (6) ^ 2 = 3625: (25) ^ 2 = 62576: (76) ^ 2 = 5776376: (376) ^ 2 = 141376625: (625) ^ 2 = 3906259376: (3476) ^ 2 = 8790937690625: (90625) ^ 2  = 8212890625109376: (109376) ^ 2 = 11963109376

很容易找到这里的规律吧,对于一个k位的正整数n,其平方数的后k位刚好等于n。

因此,我们可以有如下两种方案:

  • 数学方法

  • 字符串方法

所谓数学方法,就是先计算正整数n的平方数和n的长度k,然后获取平方数的后k位,并和n进行比较,如果相等就是自守数。

字符串方法则是利用字符串函数endswith(),它用于判断一个字符串是否以指定的后缀结尾,用法如下:

str.endswith(suffix[, start[, end]])

三个参数说明如下:

  • suffix: 要匹配的后缀字符串或字符串元组。如果是元组,则其中任意一个字符串匹配即可返回 True;

  • start (可选): 查找的起始位置索引,默认为 0;

  • end (可选): 查找的结束位置索引,默认为字符串长度。

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

三.编程实现

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

  • 数学方法

  • 字符串方法

1. 数学方法

根据前面的思路分析,编写代码如下:

图片

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

1). 在Python中,对于字符串可以使用s[-k:]截取后k位字符串;

2). 截取字符串后,需要转成整型,再和n进行比较。

2. 字符串方法

直接使用endswith()函数,编写代码如下:

图片

这个就比较简单了,注意一个细节,就是n * n 和 n都需要转成字符串类型。

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

四.总结与思考

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

  • 类型转换;

  • 条件语句;

  • 字符串运算;

  • 字符串函数;

本题代码少,比较容易,关键点是找到自守数的特点,然后使用相应的方法来实现。

上面给出的两种方法,数学方法更为通用,可以适用于所有的编程语言,字符串方法则是借助了Python提供的字符串函数,编写程序更加简单。

对于这类题目,我们必须要同时熟练掌握这两种方法,这样才能更好的提升自己的编程水平。

超平老师给你留一道思考题,如何编程输出1~100000之间所有的自守数。

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

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

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

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值