天天看點

暴力版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);

}