【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     }

转载于:https://www.cnblogs.com/outOfview/p/3866840.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值