寄生虫数
吸血鬼数
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过滤掉重复出现的数。