4位,死方法:
/**
*
*/
package com.cxm;
/**
* @author admin
*
*/
public class VampireNum
{
public static void main(String[] args)
{
findVampireNum();
}
public static void findVampireNum(){
for(int i =1000;i<9999;i++){
if(i%100==0){
continue;
}
if(isVampireNum(i)){
System.out.println(i);
}
}
}
/**
* 吸血鬼数字,他的首位数字不是在新组合的一个数的第一位,就是第二位
* @param i
* @return
*/
public static boolean isVampireNum(int i){
Integer num = Integer.valueOf(i);
char[] array = String.valueOf(num).toCharArray();
char c = array[0];
//第一位首先取出来,然后再剩下的三位中按顺序取
for(int j = 1;j<array.length;j++){
int k=0;
int w= 0;
int e=0;
int r=0;
switch (j){
case 1:
k = Integer.valueOf(String.valueOf(c)+String.valueOf(array[j]));
w = Integer.valueOf(String.valueOf(array[j]+String.valueOf(c)));
e = Integer.valueOf(String.valueOf(array[2])+String.valueOf(array[3]));
r = Integer.valueOf(String.valueOf(array[3])+String.valueOf(array[2]));
break;
case 2:
k = Integer.valueOf(String.valueOf(c)+String.valueOf(array[j]));
w = Integer.valueOf(String.valueOf(array[j]+String.valueOf(c)));
e = Integer.valueOf(String.valueOf(array[1])+String.valueOf(array[3]));
r = Integer.valueOf(String.valueOf(array[3])+String.valueOf(array[1]));
break;
case 3:
k = Integer.valueOf(String.valueOf(c)+String.valueOf(array[j]));
w = Integer.valueOf(String.valueOf(array[j]+String.valueOf(c)));
e = Integer.valueOf(String.valueOf(array[1])+String.valueOf(array[2]));
r = Integer.valueOf(String.valueOf(array[2])+String.valueOf(array[1]));
break;
}
if(k*e==i||k*r==i||w*e==i||w*r==i){
return true;
}
}
return false;
}
}
在想想可以换一个角度想这个问题,4位数只能是两位两位的相乘得到的,所以条件可以改成遍历100以内的数
public static void findVampireNum1(){
HashSet<Integer> set = new HashSet<Integer>();
for(int i =10;i<100;i++){
for(int j =10;j<100;j++){
Integer k = i*j;
char[] c = String.valueOf(k).toCharArray();
Arrays.sort(c);
char[] z = (String.valueOf(i)+String.valueOf(j)).toCharArray();
Arrays.sort(z);
if(String.valueOf(c).equals(String.valueOf(z))){
set.add(k);
}
}
}
for(Integer i : set){
System.out.print(i+" ");
}
}
通过HashSet过滤掉重复出现的数。