数字黑洞

来源:互联网 发布:单位领卡通知单 编辑:程序博客网 时间:2024/04/28 22:27
/*  * 任意一个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.Iterator;import java.util.HashSet;import java.util.List;import java.util.Set;public class 数字黑洞 {static Set<List<Integer>> sets = new HashSet<List<Integer>>();// 记录每个 循环圈static int start = 0; // 记录循环圈的开始位置// 得到最大的数public static int max(String s) {char[] c = s.toCharArray();Arrays.sort(c);StringBuffer sb = new StringBuffer(String.valueOf(c));return Integer.parseInt(sb.reverse().toString());}// 得到最小的数public static int min(String s) {char[] c = s.toCharArray();Arrays.sort(c);return Integer.parseInt(String.valueOf(c));}// 查找是否有循环圈public static boolean find(int n, List<Integer> lis) {for (int i = 0; i < lis.size(); i++) {if (n == lis.get(i)) {start = i; // 设置循环圈的开始return true;}}return false;}// 这个数字的五位是否都一样如:11111,22222,...public static boolean same(int n) {char[] c = (String.valueOf(n)).toCharArray();char t = c[0];for (int i = 1; i < c.length; i++) {if (t != c[i]) {return false;}}return true;}// 判断是否在sets元素里重复public static boolean contain(List<Integer> tt) {boolean flag = false;// 从sets头到尾扫描是是否包含tt元素组Iterator<List<Integer>> iter = sets.iterator();while (iter.hasNext()) {if (iter.next().containsAll(tt)) {flag = true;break;}}return flag;}// 输出循环圈public static void print() {Iterator<List<Integer>> iter = sets.iterator();while (iter.hasNext()) {System.out.println(iter.next());}}// 进入黑洞测试*********public static void bl(int n, List<Integer> lis) {String s = String.valueOf(n);int a = max(s); // 得到最大的数int b = min(s); // 得到最小的数int c = a - b; // 得到五位数 结果if (find(c, lis)) { // 找到循环圈List<Integer> temp = new ArrayList(); // 开辟新空间 并copy记录temp.addAll(lis.subList(start, lis.size()));if (!contain(temp)) { // 去重sets.add(temp); // 记录一个循环圈}lis.clear(); // 清空return;}lis.add(c);bl(c, lis); // 递归探测}// 主函数============public static void main(String[] args) {List<Integer> lis = new ArrayList(); // 保存记录for (int i = 10000; i < 99999; i++) {if (!same(i)) // 去掉不符合条件的元素:如(11111,22222,...)bl(i, lis); // 进入黑洞测试}print(); // 输出循环圈}}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大良老板欠薪怎么办 投影仪流明很低怎么办 户外涂鸦没有墙怎么办 word突然未响应怎么办 文档突然未响应怎么办 pr不自己播放怎么办 笔记本电脑空格键打字失灵怎么办 小孩受凉打喷嚏流鼻涕怎么办 头疼打喷嚏流鼻涕鼻塞怎么办 头疼打喷嚏想吐怎么办 感冒鼻塞头疼打喷嚏怎么办 孕期打喷嚏漏尿怎么办 孕妇打喷嚏漏尿怎么办 打喷嚏停不下来怎么办 鼻炎不停的打喷嚏怎么办 感冒了鼻子痒怎么办 怀孕鼻炎严重了怎么办 鼻炎不停打喷嚏流鼻涕怎么办 鼻子里面干痒怎么办 有鼻炎老打喷嚏怎么办 鼻子喷嚏打不停怎么办 鼻子痒想打喷嚏怎么办 鼻痒打喷嚏流鼻涕怎么办 原配找到公司了怎么办 西北游不吃羊肉怎么办 水培植物冬天该怎么办 车里味道太大怎么办 同房后有异味怎么办 房间里有异味怎么办 身上有孤臭味怎么办 炉灶打不着火怎么办 檀香木香味小了怎么办 郁金香种球发霉怎么办 烧到小天真香该怎么办 qq留言删除频繁怎么办 压缩资源有密码怎么办 电表读不了卡怎么办 office安装了打不开怎么办 3d安装打不开怎么办 电脑变得很卡怎么办 小拉布拉多掉毛怎么办