周明鳳
在眉山市首屆創(chuàng)意編程大賽中,出現(xiàn)了這樣一道操作題:
“數(shù)字黑洞153”又叫作“圣經(jīng)數(shù)”,這個奇妙的數(shù)字黑洞是一個叫科恩的以色列人發(fā)現(xiàn)的。數(shù)感極好的科恩無意中發(fā)現(xiàn)153是3的倍數(shù),并且它的各位數(shù)字的立方和仍然是153。無比興奮之余,他又用另外一些3的倍數(shù)來做同樣的運算,最后得數(shù)也都是153。于是科恩就把他發(fā)現(xiàn)的這個數(shù)字稱為“圣經(jīng)數(shù)”。圣經(jīng)數(shù)(數(shù)字黑洞153 )的規(guī)則如下:任意取一個是3的倍數(shù)的自然數(shù),求出這個數(shù)各個數(shù)位上數(shù)字的立方和,得到一個新數(shù);然后再求出這個新數(shù)各個數(shù)位上數(shù)字的立方和,又得到一個新數(shù)。重復(fù)運算下去,最后一定會掉入數(shù)字黑洞153之中。
例如:69是3的倍數(shù),按照數(shù)字黑洞153的規(guī)則,它的變換過程如下:
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.創(chuàng)建一個“數(shù)字黑洞153”有參函數(shù),參數(shù)為“自然數(shù)”。
2.程序開始時,先詢問用戶想驗證的自然數(shù)(必須是3的倍數(shù))是多少。如果用戶輸入的自然數(shù)是3的倍數(shù),就調(diào)用“數(shù)字黑洞153”函數(shù),同時將該數(shù)字作為函數(shù)的參數(shù),否則就提示用戶重新輸入一個3的倍數(shù)。
3.對“數(shù)字黑洞153”函數(shù)體編程,按照數(shù)字黑洞153的規(guī)則對輸入的數(shù)字進行運算,并將計算的過程保存到列表中,直到達到153為止。
例:當(dāng)用戶輸入69時,則程序結(jié)束時列表中應(yīng)該依次存在數(shù)字:69,945,918,1242,81,513,153。
1.根據(jù)操作題的程序要求,我們首先確定是程序有一個交互的對話界面,然后對輸入的數(shù)做出判斷,根據(jù)判斷提示用戶輸入的數(shù)據(jù)是否合法。這樣就需要設(shè)置一組“詢問”,設(shè)置一組判斷“如果數(shù)字能被3整除,或者獲得的答復(fù)除以3的余數(shù)為0”:如果滿足條件,就調(diào)用“數(shù)字黑洞153”函數(shù),同時將該數(shù)字作為函數(shù)的參數(shù),否則程序“重啟”就提示用戶“重新輸入一個3的倍數(shù)”。
2. 新建一個“變量”對應(yīng)用戶輸入的數(shù)據(jù)(獲得答復(fù)),新建一個“數(shù)字黑洞153”的函數(shù)體按照數(shù)字黑洞153的規(guī)則對輸入的數(shù)字進行運算,新建一個列表來存儲和顯示運算結(jié)果。
3.計算數(shù)字的立方和時必須考慮到數(shù)字的位數(shù)及數(shù)字的字符串的位置,設(shè)置好相應(yīng)的變量。將獲得答復(fù)的數(shù)字插入到列表末尾,且將上組數(shù)字運算生成的立方和插入到列表末尾,以方便程序進行下一次的運算,直到滿足出現(xiàn)“153”為止。
4.可以運用計算工具直接計算輸入數(shù)字的立方和。
5.采用遞歸策略計算后期出現(xiàn)數(shù)字的立方和。
6.設(shè)置“數(shù)字黑洞153”的函數(shù)體退出循環(huán)的條件。
1.打開圖形化編程軟件后導(dǎo)入相應(yīng)的背景和角色。新建變量和列表如圖1。函數(shù)體如圖2。
2.搭建程序運行交互,如圖3。
3. 搭建“數(shù)字黑洞153”的函數(shù)體一,按照規(guī)則對輸入的數(shù)字進行運算,如圖4。
此函數(shù)體根據(jù)計算數(shù)字立方和規(guī)則,把變量“數(shù)=153”作為程序運行終止的條件,如圖5。
依據(jù)題意,數(shù)字立方和的最大位數(shù)是4位,所以利用圖6的幾個積木直接搭建了4位數(shù)字立方和相加的計算公式,如圖7。
通過上面的程序搭建,初步完成了第一組數(shù)字立方和的運算。由于設(shè)置了“列表01”中如果出現(xiàn)了“153”這個數(shù)的條件,程序就停止運行,那么我們就應(yīng)該想到:如果沒有出現(xiàn)數(shù)字“153”,是不是應(yīng)該將上組運算的數(shù)字“插入到列表01的末尾”呢?然后再將此數(shù)代入圖7中變量“數(shù)”進行運算,讓程序再一次循環(huán)運行,一直到滿足“重復(fù)執(zhí)行直到‘?dāng)?shù)=153’”這一條件。設(shè)置“如果‘列表01中包含變量數(shù)’不成立”,添加變量“數(shù)”到列表01末尾,“設(shè)置變量‘?dāng)?shù)’的值為‘?dāng)?shù)’”,進行下組數(shù)的運算。如圖8紅圈中的程序。
4.利用遞歸策略搭建“數(shù)字黑洞153”的“函數(shù)體二”。
圖9程序運用了遞歸策略計算數(shù)字各位數(shù)的立方和,建立了“和、數(shù)位”變量,將上組運算得出的立方和作為“自然數(shù)”通過在“數(shù)字黑洞153”的函數(shù)體中調(diào)用本函數(shù)體再次循環(huán)運算。函數(shù)體二中將函數(shù)參數(shù)“自然數(shù)”添加到“列表01”末尾,“自然數(shù)=153”作為腳本停止運行的條件。將變量“和”作為“數(shù)字黑洞153”的函數(shù)體內(nèi)再次調(diào)用本函數(shù)體的參數(shù),采用尾遞歸的方式實現(xiàn)了程序的循環(huán)運行,如圖9。
“數(shù)字黑洞153”的函數(shù)體一和“數(shù)字黑洞153”的函數(shù)體二的計算思維都非常清晰、合理,程序運行的效果都滿足了本題的程序要求。