30. 蓝桥杯之5位黑洞数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sword_anyone/article/details/89260100

任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到
一个最大的数:65432,一个最小的数23456。
求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。
比如,刚才的数字会落入:[82962,75933, 63954, 61974]这个循环圈。
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。
其中5位数全都相同则循环圈为[0],这个可以不考虑。循环圈的输出格式仿照:
[82962,75933, 63954, 61974]其中数字的先后顺序可以不考虑。


package exe26_30;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class Exe30 {

	static  Map<String, Integer> map = new HashMap<String, Integer>();
	static  List<Map<String, List<Integer>>>  finalResult 
				= new ArrayList<Map<String,List<Integer>>>();

	public static void main(String[] args) {
		String string = null;
		for (int i = 10000; i < 100000; i++) {
			map = new HashMap<String, Integer>();
			string = String.valueOf(i);
			blackPole(string);
			save(string);
		}
		print();
	}

	private static void save(String string ) {
		List<Integer >  little = new ArrayList<Integer>();
		Map<String, List<Integer>>  littleMap =
			new HashMap<String, List<Integer>>();

		Set sets = map.keySet();
		Iterator<String> iterator = sets.iterator();
		int temp = -1;
		while(iterator.hasNext())
		{
			String key = iterator.next();
			if (temp < map.get(key)) {
				temp = map.get(key);
			}
		}
		iterator = sets.iterator();
		while(iterator.hasNext())
		{
			String key = iterator.next();
			if (Math.abs(temp - map.get(key))<=2) {
				little.add(Integer.parseInt(key));
			}
		}
		littleMap.put(string, little);
		finalResult.add(littleMap);
		map.clear();
	}

	private static void blackPole(String string) {
		int max = -1;
		int min = -1;
		int result = 0;
		for (int i = 0; i < 50; i++) {
			max = getMax(string);
			min = getMin(string);
			result = max - min;
			if (map.containsKey(result+"")) {
				int times = map.get(result+"");
				map.remove(result+"");
				map.put(result+"", times+1);
			}
			else{
				map.put(result+"", 1);
			}
			if (result<10000) {
				string = String.valueOf("0"+result);
			}else {
				string = String.valueOf(result);
			}
		}
	}

	private static void print() {
		Iterator<Map<String, List<Integer>>> iterator = finalResult.iterator();
		while(iterator.hasNext())
		{
			Map<String, List<Integer>> maps = iterator.next();
			Iterator<String>  in= maps.keySet().iterator();
			while(in.hasNext())
			{
				String str = in.next();
				System.out.println(str+" -> "+maps.get(str));
			}
		}
	}

	private static int getMax(String string) {
		char ch[] = string.toCharArray();
		Arrays.sort(ch);
		String str = "";
		for (int i = 0; i < ch.length; i++) {
			str = ch[i]+str;
		}
		return Integer.parseInt(str);
	}

	private static int getMin(String string) {
		char ch[] = string.toCharArray();
		Arrays.sort(ch);
		String  max = new String(ch);
		return Integer.parseInt(max);
	}

}

支付宝扫红包,让我能够买杯咖啡,继续创作,谢谢大家!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sword_anyone/article/details/89260100