任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。
比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。
循环圈的输出格式仿照:
[82962, 75933, 63954, 61974]
其中数字的先后顺序可以不考虑。
代码:
package BigTitle;
import java.util.Arrays;
import java.util.HashSet;
public class blackHole
{
static String s;
static HashSet<Integer> hash;
static HashSet<Integer> n=new HashSet<Integer>();
static HashSet<HashSet<Integer>> stack=new HashSet<HashSet<Integer>>();
public static void main(String args[])
{
for(int i=10000;i<100000;i++)
{
s="";
n.clear();
bean(i);
}
for(HashSet<Integer>n:stack)
{
System.out.println(n);
}
}
static void bean(int i)
{
int[]a=new int[5];
String f=String.format("%05d",i);
for(int j=0;j<f.length();j++)
{
a[j]=f.charAt(j)-'0';
}
Arrays.sort(a);
int end=Integer.parseInt(a[4]+""+a[3]+a[2]+a[1]+a[0])-Integer.parseInt(a[0]+""+a[1]+a[2]+a[3]+a[4]);
String str=String.format("%05d",end);
if(s.contains(str))
{
String bt=s.substring(s.indexOf(str));
String[] xp=bt.split(",");
for(int i1=0;i1<xp.length;i1++)
{
n.add(Integer.parseInt(xp[i1]));
}
hash=(HashSet<Integer>)n.clone();
stack.add(hash);
}
else
{
s+=str+",";
bean(end);
}
}
}
/*
1.HashSet的用法
2.clone()用法
3.递归用法
*/