任意一个5位数,比如:
34256,把它的各位数字打乱,
重新排列,可以得到一个最大的数:
65432,一个最小的数
23456。求这两个数字的差,得:
41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。
比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个 循环圈。
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。
循环圈的输出格式仿照:
[82962, 75933, 63954, 61974]
比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个 循环圈。
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。
循环圈的输出格式仿照:
[82962, 75933, 63954, 61974]
其中数字的先后顺序可以不考虑。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
/**
*
* @author «ÿ’‹
*
*/
public class HeiDong {
//—≠ª∑»¶÷–µƒÀ˘”– ˝
static Set<String> xhq = new HashSet<String>();
static ArrayList al;
static Set<String> set;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=10000; i<100000; i++) {
al = new ArrayList();
set = new HashSet<String>();
int n = getMaxSubMin(i);
if(n == 0) {
ArrayList al_xhq = new ArrayList();
int max = al.size() - 1;
String s = (String) al.get(max);
al_xhq.add(s);
xhq.add(s);
while(true){
max--;
if(al.get(max).equals(s)) break;
al_xhq.add(1, al.get(max));
xhq.add((String) al.get(max));
}
System.out.println(al_xhq);
}
}
}
/**
*
*/
public static int getMaxSubMin(int n) {
if(xhq.contains(n+"")) return -1;
al.add(n+"");
if(set.add(n+"")) {
int[] a = new int[5];
a[0] = n / 10000;
a[1] = n / 1000 % 10;
a[2] = n / 100 % 10;
a[3] = n / 10 % 10;
a[4] = n % 10;
Arrays.sort(a);
int m = (a[4]-a[0])*10000 + (a[3]-a[1])*1000 + (a[1]-a[3])*10 + (a[0]-a[4]);
return getMaxSubMin(m);
}
else return 0;
}
}