文 湖南省安仁縣第一中學高417班 張坤武
用C#求證“黑洞數
文 湖南省安仁縣第一中學高417班 張坤武
黑洞是茫茫宇宙中的神秘天體。黑洞密度極大,引力極強,任何物質經過它的附近,都會被它吸進去。
曾有人猜測,百慕大三角洲的飛機和輪船離奇失蹤,可能就是遭遇了黑洞。當然,這一猜測從未得到公開、正確的科學解釋。
在浩瀚無垠的數學宇宙中,也存在“黑洞”之說,即取任意一個數字不重復的三位數或四位數,將該數字重新組合成可能的最大數和最小數后求差,再將這個差重復同樣的過程,經過有限次的重復,最后總是得到同一個差,這個差就被稱為“黑洞數”。
如數字6、7、8、9,重新組合成的最大數為9876、最小數為6789,按照上述方法的計算結果是:9876-6789=3087,8730-378=8352,8532-2358=6174,7641-1467=6174,之后不論如何計算,結果都是6174,6174即四位數的“黑洞數”。
6174是所有不重復四位數的“黑洞數”嗎?C#語言可以幫我們找出答案。
C#是微軟開發的基于.net平臺的編程語言,集windows開發和web應用于一體,功能強大,使用方便。
1.了解解題思路
由“黑洞數”的得出過程可知,任意一個無重復數的四位數或三位數,按照指定的規則重新組合、求差,然后重復這一過程,最后可得出“黑洞數”。
對此,可用中文偽代碼表示為“函數求黑洞(整數型參數)”,返回值為“差”,然后迭代循環執行“函數求黑洞”(“差”),直到得出一個不再變化的“差”,這個“差”即為黑洞數。
這個算法用編程專業術語叫“遞歸”,即函數自己調用自己。
2.將算法變為代碼
C#的控制臺編程簡單明了,點擊“文件”-“新建”-“項目”,選擇“控制臺應用程序”即可。由以上偽代碼可知,首先需定義一個求黑洞的函數,具體實現如下。

以上二十多行代碼即完成了求黑洞數功能。但如果一個一個地將數字輸入求證,未免是用宰牛刀殺雞,所以,還可用C#來實現,即讓程序自動賦值100至999,或從1000到9999,讓求黑洞函數進行求證,并將結果顯示。
3.具體求證實現
先定義一個函數(或叫作方法),讓它自動循環迭代計算出想要的結果。具體實現如下。

至此,代碼工作基本完成,啟動程序調試即可看到以下結果(部分截圖)。

由上可知,四位數的黑洞數是6174,三位數的黑洞數是495。
以上過程如果由人工手動求證,單計算幾千個整數的求差,就非常耗時,更別說后期的計算了。
可見,掌握方便、簡潔的解題思路即算法,再輔以電子計算機,我們的學習、工作和生活都將如虎添翼。