【Java】 Thinking in Java 4.8 练习10 吸血鬼数字

来源:互联网 发布:java 源代码加密混淆 编辑:程序博客网 时间:2024/05/20 14:44

题目:

吸血鬼数字是指位数为偶数的数字,可以有一对数字相乘得到,而这对数字各包含成绩的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。

 以两个0结尾的数字是不允许的。写一个程序,找出4位数中所有吸血鬼数字。

方法一:

 1     public static void main(String[] args) { 2         outer: for (int i = 10; i <= 99; i++) { 3             for (int j = i + 1; j <= 99; j++) { 4                 int sum = i * j; 5                 if (sum <= 9999 && sum >= 1000) { 6                     String[] t1 = (sum + "").split(""); 7                     Arrays.sort(t1); 8                     String[] t2 = ("" + i + j).split(""); 9                     Arrays.sort(t2);10                     if (Arrays.equals(t1, t2)) {11                         System.out.println(i + "*" + j + "=" + sum);12                     }13                     break outer;14                 }15             }16         }17     }

方法二:

 1 public static void main(String[] args) { 2         ArrayList<Integer> list = new ArrayList<Integer>(); // 提高效率所引用线性表 3         ArrayList<Integer> result = new ArrayList<Integer>(); // 防止结果集重复 4         boolean test = true; 5         boolean flag = false; 6         for (int i = 11; i < 99; i++) 7             for (int j = (1000 / i) + 1; j < 99; j++) { 8                 list.clear(); 9                 String str1 = new Integer(i * j).toString(); // 相乘后10                 String str2 = String.valueOf(i) + String.valueOf(j);11                 for (int m = 0; m < 4; m++) {12                     for (int n = 0; n < 4; n++) {13                         test = true;14                         for (int x = 0; x < list.size(); x++)15                             if (n == list.get(x))16                                 test = false; // 如果表中存在索引17                         if (test == false)18                             continue;19                         if (str1.charAt(m) == str2.charAt(n)) {20                             list.add(n);21                             break;22                         }23                     }24                 }25                 if (list.size() == 4) {26                     flag = true;27                     for (int count = 0; count < result.size(); count++) {28                         if (result.get(count) == i * j) {29                             flag = false;30                         }31                     }32                     if (flag != false) {33                         System.out.println(i * j + "=" + i + "*" + j);34                         result.add(i * j);35                     }36                 }37             }38     }
0 0