黑洞数(软件大赛)


任意一个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.递归用法
*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值