[size=medium]任意乙個5位數,比如:34256,把它的各位數字打亂,重新排列,可以得到乙個最大的數:65432,乙個最小的數23456。求這兩個數字的差,得:41976,把這個數字再次重複上述過程(如果不足5位,則前邊補0)。如此往復,數字會落入某個迴圈圈(稱為數字黑洞)。
比如,剛才的數字會落入:[82962, 75933, 63954, 61974] 這個迴圈圈。
請編寫程式,找到5位數所有可能的迴圈圈,並輸出,每個迴圈圈占1行。其中5位數全都相同則迴圈圈為 [0],這個可以不考慮。迴圈圈的輸出格式仿照:
[82962, 75933, 63954, 61974]
其中數字的先後順序可以不考慮。
(**其實並不算長,只是注釋寫多了。如果有更好的方法,望賜教。)
[/size]
/*** @category 數字黑洞
* @author liucanwen
* @time 2012-1-17 20:30
*/public class numberblackhole
//呼叫方法getcycle()來得到數字序列list
arraylist list2 = nbh.getcycle(i, 0);
//標誌索引:數字黑洞的開始索引。
int deleteindex = 0;
//遍歷得到的list2(數字序列)
for(int j = 0; j < list2.size(); j++)
}//刪除數字黑洞開始索引之前的數字
for(int k = 0; k < deleteindex; k++)
//刪除數字黑洞之後的數字,只保留數字黑洞一次迴圈體
for(int m = 0; m < 10 - deleteindex - 4; m++)
//列印數字黑洞的一次迴圈體
system.out.println(list2);}}
/*** @param number 傳過來的5位數
* @param index 是該方法在遞迴的時候做標識退出
* @return arraylist 裝有數字黑洞的數字序列
*/@suppresswarnings("unchecked")
public arraylist getcycle(int number, int index)
//當最大值-最小值得到的結果為四位數
else if(4 == chars.length)
//當最大值-最小值得到的結果為三位數
else if(3 == chars.length)
//當最大值-最小值得到的結果為二位數
else if(2 == chars.length)
//當最大值-最小值得到的結果為一位數
else if(1 == chars.length)
else
//把傳過來的五位數排成最大值和最小值
int minvalue = first*10000 + second*1000 + three*100 + four*10 + five;
int maxvalue = first + second*10 + three*100 + four*1000 + five*10000;
//得到最大值-最小值的差count
int count = maxvalue - minvalue;
//把上面得到的差count放到list當中
list.add((integer)count);
//進行遞迴,遞迴結束條件由index來控制
getcycle(count, index + 1);
return list;}}
23號第十題
小兔的叔叔從外面旅遊回來給她帶來了乙個禮物,小兔高興地跑回自己的房間,拆開一看是乙個棋盤,小兔有所失望。不過沒過幾天發現了棋盤的好玩之處。從起點 0,0 走到終點 n,n 的最短路徑數是c 2n,n 現在小兔又想如果不穿越對角線 但可接觸對角線上的格點 這樣的路徑數有多少?小兔想了很長時間都沒想出來...
尤拉計畫 第十題
the sum of the primes below 10 is 2 3 5 7 17.find the sum of all the primes below two million.低於10的素數之和為2 3 5 7 17。找出200萬以下所有素數的總和。思路這道題與第7題的線性篩思路一樣,只...
第十題 爬樓梯
假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例 1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1 階 1 階 2 階示例 2 輸入 3 輸出 3 解釋 有三種方法可以爬到樓頂。3.1 階 ...