吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各报刊乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的。
例如:
1260=21*60;
1827=21*87;
2187=27*81;
写一个程序,找出4位数的所有吸血鬼数字。
import java.util.Arrays; public class VampireNumber{ public static void main(String[] args){ long s1=System.nanoTime(); fun1(); long e1=System.nanoTime(); System.out.println(e1-s1); long s2=System.nanoTime(); fun2(); long e2=System.nanoTime(); System.out.println(e2-s2); long s3=System.nanoTime(); fun3(); long e3=System.nanoTime(); System.out.println(e3-s3); } public static void fun1(){ int m=0; String[] temp1=new String[4]; String[] temp2=new String[4]; for(int i=10;i<100;i++){ for(int j=i;j<100;j++){ m=i*j; if(m<1000||m>9999||(m%9!=(i+j)%9)){ continue; } temp1=String.valueOf(m).split(""); temp2=(String.valueOf(i)+String.valueOf(j)).split(""); Arrays.sort(temp1); Arrays.sort(temp2); if(Arrays.equals(temp1,temp2)){ System.out.println(m); } } } } public static void fun2(){ int m; for(int i=10;i<100;i++){ for(int j=i;j<100;j++){ m=i*j; if(m<1000||m>9999||(m%9!=(i+j)%9)){ continue; } int[] a={m/1000,m/100%10,m/10%10,m%10}; int[] b={i/10,i%10,j/10,j%10}; Arrays.sort(a); Arrays.sort(b); if(Arrays.equals(a,b)){ System.out.println(m); } } } } public static void fun3(){ int m; for(int i=10;i<100;i++){ for(int j=i;j<100;j++){ m=i*j; if(m<1000 || m>9999 ||(m%9!=(i+j)%9)){ continue; } int[] a={m/1000,m/100%10,m/10%10,m%10}; int[] b={i/10,i%10,j/10,j%10}; int count=0; for(int x=0;x<a.length;x++){ for(int y=0;y<b.length;y++){ if(a[x]==b[y]){ count++; a[x]=-1; b[y]=-2; if(count==4){ System.out.println(m); } } } } } } } }
三种方法中,运行效率依次为fun3(),fun2(),fun1()。如果x*y是吸血鬼数字,那么(x*y)%9==(x+y)%9。
posted on
浙公网安备 33010602011771号