周明鳳
在眉山市首屆創意編程大賽中,出現了這樣一道操作題:
“數字黑洞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”的函數體二的計算思維都非常清晰、合理,程序運行的效果都滿足了本題的程序要求。