【Java】 Thinking in Java 4.8 练习10 吸血鬼数字
题目:
吸血鬼数字是指位数为偶数的数字,可以有一对数字相乘得到,而这对数字各包含成绩的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。
以两个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 }