您的位置:首页 > 其它

任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432, 一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,

2013-06-30 16:58 946 查看
/**
*
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,
一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。
如此往复,数字会落入某个循环圈(称为数字黑洞)。
比如,刚才的数字会落入:[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.Iterator;
import java.util.List;
import java.util.Set;

public class 数字黑洞 {
static Set<List> set = new HashSet<List>();
static int start = 0;
public static void main(String[] args) {
List list = new ArrayList(0);
for (int i = 10000; i < 100000; i++) {
if (i % 11111 == 0) {
continue;
} else {
检测循环圈(i, list);
}
}
print();

}

private static void print() {
Iterator<List> it = set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}

}

private static void 检测循环圈(int n, List list) {
String s = n+"";
char[] c = s.toCharArray();
int a  = max(c);
int b = min(c);
int d = a -b ;
if(寻找循环圈(d,list)){
List temp = new ArrayList();
temp.addAll(list.subList(start, list.size()));
if(!contains(temp)&&temp.get(0)!=0){
set.add(temp);
}
list.clear();
return ;

}
list.add(d);
检测循环圈(d,list);

}
//去重
private static boolean contains(List temp) {
boolean flag = false;
Iterator<List> it = set.iterator();
while(it.hasNext()){
if(it.next().containsAll(temp)){

flag =  true;
break;
}

}
return flag;
}

private static boolean 寻找循环圈(int n, List list) {

for(int i = 0;i<list.size();i++){
if(list.get(i)==n){
start = i;
return true;
}
}
return false;
}

//计算最小的数字
private static int min(char[] c) {

Arrays.sort(c);
StringBuffer sb = new StringBuffer(String.valueOf(c));
return Integer.parseInt(sb.toString());
}
//计算最大的数字
private static int max(char[] c) {
Arrays.sort(c);
StringBuffer sb = new StringBuffer(String.valueOf(c));
return Integer.parseInt(sb.reverse().toString());

}

}
运行结果:
[63954, 61974, 82962, 75933]
[74943, 62964, 71973, 83952]
[53955, 59994]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐