天天看点

暴力版java 吸血鬼数字 代码 --- 依靠循环嵌套解决。

我写的只依靠 循环嵌套 + 1个数组的 吸血鬼数字代码

思路:将任意四位数拆解为 四个单独的数字。然后依托数组和循环嵌套,模拟排列组合运算 4*3*2*1.最后进行与原整数匹配。

没解决委托:为什么每个结果会打印两遍?

import static net.mindview.util.Print.*;

public class VampireNum 

{

public static void main(String args[])

{

for(int i = 1000; i<10000; i++)

{

int d = i % 10;

int c = ((i - d) % 100)/10;

int b = ((i - (10*c + d))%1000)/100;

int a = ((i - (100*b +(10*c + d)))%10000)/1000; // 提前四位整数的每个数字

int[] test = new int[4];  

test[0]= a;

test[1]= b;

test[2]= c;

test[3]= d;    //将四个数字放入四位数组

for(int k=0; k<4; k++)

{

int a1 = test[k];      //提取第一个数,四种可能

for(int l=0; l<4;l++)

{

int a2 = test[l];

if(a2 != a1)   //提取第二个数,排除掉第一个数,三种可能

{

int j1 = a1*10 + a2; //从四位数字中,任选两个数组成两位数

for(int m = 0; m <4; m++)

{

int a3 = test[m];

if(a3 != a2 && a3 != a1)  //提取第三个数,二种可能

{

int j2 = a3*10;  

for(int p = 0; p <4; p++)

{

int a4 = test[p];

if(a4 != a3 && a4 != a2 && a4 != a1) //提取第四个数,一种可能

{

   int j3 = j2+a4; //最后任意两个数组成两位数

int j4 = j1*j3;

if(i == j4 && i%100 != 0)

{

//print("number= " + i);

print("number:  " + i + " = " + j1 + "*" + j3);

                       }

}

}

}

}

   }

}

}

}

}

}

输出结果:每个结果会打印两遍,原因是,j1 与 j3 顺序互换,也视为了输出结果。

number:  1260 = 21*60

number:  1260 = 60*21

number:  1395 = 15*93

number:  1395 = 93*15

number:  1435 = 41*35

number:  1435 = 35*41

number:  1530 = 51*30

number:  1530 = 30*51

number:  1827 = 87*21

number:  1827 = 21*87

number:  2187 = 27*81

number:  2187 = 81*27

补充,我发现,重复打印问题,基本上只打印奇数或者只打印偶数就可以解决了。于是我进行了一下求模筛选。

                                                                                                       if(i == j4 && i%100 != 0)

{

count ++;    

if(count % 2 == 0)  //防止重复输出

{

print("number:  " + i + " = " + j1 + "*" + j3);

}