JAVA 吸血鬼数字学习

来源:互联网 发布:java list 相同的元素 编辑:程序博客网 时间:2024/05/29 21:18

       什么是吸血鬼数字:吸血鬼数字是指位数为偶数的数字。可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,选取的数字可以任意排序。以两个0结尾的数字是不允许的。    举例说明如下:

1260 = 21 * 60

1827 = 21 * 87

2187 = 27 * 81

     我们根据通过找四位数的吸血鬼数字来分析。

 

     首先,一个四位数的吸血鬼数字必须由两个10~100之间的数相乘得到。如果两个数相乘得到的数为val = 1000a + 100b + 10c + d,假设其中一个数为 i = 10a + b, 另一个数为 j = 10d + c,则所要满足的吸血鬼数字的条件之一是(val-i-j%9 == 0,这一点不管是abcd如何匹配成ij都满足,还有一点可以排除是非吸血鬼数字的就是val%100 != 0,因为吸血鬼数字以两个0结尾是不允许的。这只是排除的第一步,有利于减少算法的复杂性。

     第二步就是通过split函数将刚才的数字经行拆分,并通过sort函数来排序,如果val拆分为四个数字后和(i+j)(在此为字符串)拆分后排序结果相同,则证明该数字val是吸血鬼数字。简单的描述如下:String [] str1 = String.valueOf(val).split(“”);

  String [] str2 = (String.valueOf(i)+String.valueOf(j)).split(“”);

Arrays.sort(str1);

Array.ssort(str2);

If(Arrays.equals(str1,str2))

......

在此需要特别说明的是split函数。这里只做简要说明,详细可参考http://hi.baidu.com/zh821221/item/fec5265d342f679708be17bc或在java api文档中查看。使用String.split(“”)函数可将数字划分,诸如i = 10a +bab可以划分为数字a和数字b

      好了,下面写代码,由于是初学者,代码很渣,如有问题,恳请指教。

import java.util.*;public class Vampire{public static void main(String[] args){String [] str1, str2;int count = 1;for(int i = 10; i < 100; i++)for ( int j = i+1; j < 100; j++){int val = i * j;if(val%100 == 0 || ((val-i-j)%9 != 0)){continue;}str1 = String.valueOf(val).split("");str2 = (String.valueOf(i)+String.valueOf(j)).split("");Arrays.sort(str1);Arrays.sort(str2);if(Arrays.equals(str1,str2)){System.out.println("第"+count+"组 :"+val+" = "+ i+"*"+j);count += 1;}}}}



运行结果为:

第1组 :1395 = 15*93

第2组 :1260 = 21*60

第3组 :1827 = 21*87

第4组 :2187 = 27*81

第5组 :1530 = 30*51

第6组 :1435 = 35*41

第7组 :6880 = 80*86



0 0
原创粉丝点击