我寫的隻依靠 循環嵌套 + 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);
}