从学生思维角度出发,深度解析“数字黑洞153”
2022-03-24周明凤
周明凤
在眉山市首届创意编程大赛中,出现了这样一道操作题:
“数字黑洞153”又叫作“圣经数”,这个奇妙的数字黑洞是一个叫科恩的以色列人发现的。数感极好的科恩无意中发现153是3的倍数,并且它的各位数字的立方和仍然是153。无比兴奋之余,他又用另外一些3的倍数来做同样的运算,最后得数也都是153。于是科恩就把他发现的这个数字称为“圣经数”。圣经数(数字黑洞153 )的规则如下:任意取一个是3的倍数的自然数,求出这个数各个数位上数字的立方和,得到一个新数;然后再求出这个新数各个数位上数字的立方和,又得到一个新数。重复运算下去,最后一定会掉入数字黑洞153之中。
例如:69是3的倍数,按照数字黑洞153的规则,它的变换过程如下:
6^3+9^3=945
9^3+4^3+5^3=918
9^3+1^3+8^3=1242
1^3+2^3+4^3+2^3=81
8^3+1^3=513
5^3+1^3+3^3=153
注:“^”表示次方,例如6^3表示6的3次方,即6×6×6。
程序要求:
1.创建一个“数字黑洞153”有参函数,参数为“自然数”。
2.程序开始时,先询问用户想验证的自然数(必须是3的倍数)是多少。如果用户输入的自然数是3的倍数,就调用“数字黑洞153”函数,同时将该数字作为函数的参数,否则就提示用户重新输入一个3的倍数。
3.对“数字黑洞153”函数体编程,按照数字黑洞153的规则对输入的数字进行运算,并将计算的过程保存到列表中,直到达到153为止。
例:当用户输入69时,则程序结束时列表中应该依次存在数字:69,945,918,1242,81,513,153。
1.根据操作题的程序要求,我们首先确定是程序有一个交互的对话界面,然后对输入的数做出判断,根据判断提示用户输入的数据是否合法。这样就需要设置一组“询问”,设置一组判断“如果数字能被3整除,或者获得的答复除以3的余数为0”:如果满足条件,就调用“数字黑洞153”函數,同时将该数字作为函数的参数,否则程序“重启”就提示用户“重新输入一个3的倍数”。
2. 新建一个“变量”对应用户输入的数据(获得答复),新建一个“数字黑洞153”的函数体按照数字黑洞153的规则对输入的数字进行运算,新建一个列表来存储和显示运算结果。
3.计算数字的立方和时必须考虑到数字的位数及数字的字符串的位置,设置好相应的变量。将获得答复的数字插入到列表末尾,且将上组数字运算生成的立方和插入到列表末尾,以方便程序进行下一次的运算,直到满足出现“153”为止。
4.可以运用计算工具直接计算输入数字的立方和。
5.采用递归策略计算后期出现数字的立方和。
6.设置“数字黑洞153”的函数体退出循环的条件。
1.打开图形化编程软件后导入相应的背景和角色。新建变量和列表如图1。函数体如图2。
2.搭建程序运行交互,如图3。
3. 搭建“数字黑洞153”的函数体一,按照规则对输入的数字进行运算,如图4。
此函数体根据计算数字立方和规则,把变量“数=153”作为程序运行终止的条件,如图5。
依据题意,数字立方和的最大位数是4位,所以利用图6的几个积木直接搭建了4位数字立方和相加的计算公式,如图7。
通过上面的程序搭建,初步完成了第一组数字立方和的运算。由于设置了“列表01”中如果出现了“153”这个数的条件,程序就停止运行,那么我们就应该想到:如果没有出现数字“153”,是不是应该将上组运算的数字“插入到列表01的末尾”呢?然后再将此数代入图7中变量“数”进行运算,让程序再一次循环运行,一直到满足“重复执行直到‘数=153’”这一条件。设置“如果‘列表01中包含变量数’不成立”,添加变量“数”到列表01末尾,“设置变量‘数’的值为‘数’”,进行下组数的运算。如图8红圈中的程序。
4.利用递归策略搭建“数字黑洞153”的“函数体二”。
图9程序运用了递归策略计算数字各位数的立方和,建立了“和、数位”变量,将上组运算得出的立方和作为“自然数”通过在“数字黑洞153”的函数体中调用本函数体再次循环运算。函数体二中将函数参数“自然数”添加到“列表01”末尾,“自然数=153”作为脚本停止运行的条件。将变量“和”作为“数字黑洞153”的函数体内再次调用本函数体的参数,采用尾递归的方式实现了程序的循环运行,如图9。
“数字黑洞153”的函数体一和“数字黑洞153”的函数体二的计算思维都非常清晰、合理,程序运行的效果都满足了本题的程序要求。