任意一個5位元,比如:34256,把它的各位元字打亂,重新排列,可以得到一個最大的數:65432,一個最小的數23456。求這兩個數位差,得:41976,把這個數字再次重複上述過程(如果不足5位,則前邊補0)。如此往複,數字會落入某個迴圈圈(稱為數字黑洞)。比如,剛才的數字會落入:[82962, 75933, 63954, 61974] 這個迴圈圈。歡迎提出意見與建議!
關於黑洞數,詳細可見百度百科 點擊開啟連結
package net.as.cn;import java.util.ArrayList;import java.util.Scanner;/** * 黑洞數演算法 * @author chenaschen * */public class HeiDongShu{public static ArrayList<Integer> list = new ArrayList<Integer>();public static void main(String[] agrs){//Scanner input = new Scanner(System.in);//String str = input.nextLine();String s = "34256";getNum(s);System.out.print("[");for(int i=0; i<list.size()-1; i++){System.out.print(list.get(i)+", ");}System.out.println(list.get(list.size()-1)+"]");}/** * 從大到小排序 * @param c * @return */public static String sortMax(char[] c){StringBuffer sb = new StringBuffer();for(int i=0; i<c.length; i++){int k = i;for(int j=i+1; j<c.length; j++){if(c[k]<c[j]){char temp = c[j];c[j] = c[k];c[k] = temp;}}sb.append(c[k]);}return sb.toString();}/** * 從小到大排序 * @param c * @return */public static String sortMin(char[] c){StringBuffer sb = new StringBuffer();for(int i=0; i<c.length; i++){int k = i;for(int j=i+1; j<c.length; j++){if(c[k]>c[j]){char temp = c[j];c[j] = c[k];c[k] = temp;}}sb.append(c[k]);}return sb.toString();}/** * 利用遞迴 * @param s */public static void getNum(String s){Integer max=Integer.parseInt((sortMax(s.toCharArray())));Integer min=Integer.parseInt(sortMin(s.toCharArray()));Integer n = max - min;if(list.contains(n)) {for(int j=0; j<list.indexOf(n); j++){list.remove(j);}return;}else{list.add(n);getNum(n.toString());}}}