版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
}
}
支付宝扫红包,让我能够买杯咖啡,继续创作,谢谢大家!