数学黑洞495的Python求解和验证

2022-03-08 04:00丁大为王德贵
电脑报 2022年8期
关键词:四位数三位数列表

丁大为 王德贵

通过前期的文章,我们了解了“数学黑洞6174”,也确实感到了数学中的玄妙。卡普雷卡尔(Kaprekar)黑洞,又称重排求差黑洞,其计算过程称为卡普雷卡尔运算,这个现象称归敛,“6174”称归敛结果。四位数的黑洞是“6174”,那三位数有同样的黑洞吗?

今天我们用Python来求解和验证。

数学黑洞问题,经过几天的研究,真的感觉很有意思,那么除了四位数的6174,三位数、五位数是不是也有类似的规律呢,这期分享三位数的黑洞。

找到三位数的数学黑洞是一个求解和验证的问题,也要解决以下三个问题。

一是输入任意一个三位数(不包含全部相同的数字),验证最后经过运算是不是得到一个固定的值;二是在一定范围内,是不是所有数都能得到这个固定值;三是要得到这个值最多需要多少步骤。

思路与四位数验证一样,首先要将三位数分解开单个数字,存储在新列表中,然后排序列表,输出最大和最小数,做差,然后再存储在新列表中,循环操作,看看最后是不是得到一个固定的值。

程序涉及的是中国电子学会编程等级考试四级知识点。

1.求解

即求解三位数的归敛结果,是什么样的数据。

参照四位数验证方法,程序设计(如图1)。

将输入的三位数转化为列表,然后判断数字是否完全相同,如果不完全相同,则循环执行将列表中的三个数字排序,取出最大和最小的数,做差,在屏幕上显示出来,同时添加到列表m中,如果有归敛结果,则会有重复数据,于是判断列表的长度和转换为集合后的长度比较,如果不相等,则输出最后一个数据,即为归敛结果。

比如输入:123,运行结果(如图2)。

大家可以看到,归敛结果为495!那其他三位数也是归敛结果吗?下面我们来验证一下。

2.验证

即是输入任意一个数字不完全相同的三位数,进行验证,看看能不能得到495,需要几步。这里利用了自定义函数。

(1)递推法

输入一个三位数,但三个数字不能完全相同,将其转换为列表,排序、连接、转换出最大值和最小值,做差,再转换为列表,如果不够3位,则添加“0”,进行下一轮循环,直到得到“495”,然后输出转换用了多少次(如图3)。比如验证输入123,5次后获得结果495。

(2)递归法

递归与递推的不同之处,是调用了自身,达到循环的目的。过程和方法与递推类似。不同的是,递推算法中第7行的n=0去掉了,这是因为如果加上这行,每次调用自身的时候,n都会归0,不能计数,因而必须先设置n=0,然后在自定义函数中用“global n”。两种方法验证的结果是完全一样的(如图4)。

3.范围

即是验证一定范围内所有数字不完全相同的三位数,看看能不能得到495,在这个范围内需要最多的步数是多少。

(1)递推法

通过递推法验证(如图5)。

下面是在100-999范围内的递推法验证,即所有三位数的验证结果。在数字完全一样时,给出提示,从验证结果看,所有不完全相同的三位数,经过运算均可以得到“495”,并运算的最多次数是“6”(如图6)。

(2)递归法

递归法和递推法一样,也是在验证的基础上,验证一定范围内的所有整数,经过运算是不是都能得到“495”,并输出最多的运算次数。不同的是递归是通过调用自身,达到循环的目的。

同样,递归法需要将递推算法中的n=0去掉,而在遍历前设置n=0,然后在自定义函数中設置为“global n”。m为最大次数变量(如图7)。

下面是在100-999范围内的递归法验证,即所有三位数的验证结果。在数字完全一样时,给出提示,从验证结果看,所有不完全相同的三位数,经过运算均可以得到“495”,并运算的最多次数是“6”(如图8)。

我们看到,两种方法的验证结果是完全一样的。

通过验证,递推和递归方法得出的结果完全相同。这是在“6174”验证的基础上,修改程序后,比较容易得到的。那你注意到三位数和四位数在验证的时候,有什么相同点和不同点吗?

我们只用Python做了验证,有兴趣的老师和同学可以参考“6174”的方法用Scratch和APPInventor去验证。

本文是我自己的研究过程和心得,有不妥之处,请各位老师和同学斧正!

猜你喜欢
四位数三位数列表
云朵装礼物——三位数
东东“闯关”记
扩列吧
三位数密码
列表法解分式方程问题探索
列表画树状图各有所长
小花鹿写数
2011年《小说月刊》转载列表
二年级万以内数的遮法和写法单元自测题
有趣的四位数