【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     }
posted @ 2014-07-25 00:21  风景线外  阅读(277)  评论(0编辑  收藏  举报