题目:吸血鬼数字是指位数为偶数的数字,可以有一对数字相乘而得到,而这对数字各包含成绩的一半位数的数字,其中成那个最出的数字总选取的数字可以任意排序,一两个0结尾的数字是不允许的,例如,下列数字都是吸血鬼数字:
1260=2160
1827=2187
2178=27*81
找出4位数的所有吸血鬼数字。
代码实现:
public class xiXueGui {
public static void main(String[] args){
int[] num = new int[4];
for(int i=1000;i<10000;i++){
if(i%100!=0){
num[0]=i/1000;
num[1]=(i%1000)/100;
num[2]=((i%1000)%100)/10;
num[3]=((i%1000)%100)%10;
if((num[0]*10+num[1])*(num[2]*10+num[3])==i||(num[0]*10+num[1])*(num[3]*10+num[2])==i||
(num[1]*10+num[0])*(num[2]*10+num[3])==i||(num[1]*10+num[0])*(num[3]*10+num[2])==i||
(num[0]*10+num[2])*(num[1]*10+num[3])==i||(num[0]*10+num[2])*(num[3]*10+num[1])==i||
(num[2]*10+num[0])*(num[1]*10+num[3])==i||(num[2]*10+num[0])*(num[3]*10+num[1])==i||
(num[0]*10+num[3])*(num[1]*10+num[2])==i||(num[0]*10+num[3])*(num[2]*10+num[1])==i||
(num[3]*10+num[0])*(num[1]*10+num[2])==i||(num[3]*10+num[0])*(num[2]*10+num[1])==i){
System.out.println(i);
}
}
}
}
}
在网上看到通过字符串实现吸血鬼数据算法,相当巧妙,参考网址:https://www.cnblogs.com/Sabre/p/7640550.html。
具体实现代码为:
public class XIXUEGUI2 {
public static void main(String[] args){
String[] ar_str1, ar_str2;
int sum = 0;
for (int i = 10; i < 100; i++) {
for (int j = i + 1; j < 100; j++) {
int i_val = i * j;
if (i_val < 1000 || i_val > 9999)
continue; // 只找4位的吸血鬼数据
ar_str1 = String.valueOf(i_val).split("");//把四位数据分割成长度为4的字符串数组
ar_str2 = (String.valueOf(i) + String.valueOf(j)).split("");//先把两个两位数组链接成一个字符串,在分割成一个四位的字符串数组
java.util.Arrays.sort(ar_str1);//对原有4位字符串数组进行排序
java.util.Arrays.sort(ar_str2);//对链接成的4位字符串数组进行排序
if (java.util.Arrays.equals(ar_str1, ar_str2)) {
// 若两个数组相同,则为吸血鬼数字
sum++;
System.out.println("第" + sum + "组: " + i + "*" + j + "=" + i_val);
}
}
}
System.out.println("共找到" + sum + "组吸血鬼数");
}
}
若要找到6位或者8位的吸血鬼数据,更改循环范围即可。