【Java學習筆記】吸血鬼數
阿新 • • 發佈:2018-12-08
吸血鬼數字,是指數位為偶數的數字,可以由一對數字相乘而得到,而這對數字各包含
乘積的一半位數的數字,其中從最初的數字中選取的數字可以任意排序。
以兩個0結尾的數字是不允許的,例如,下列數字都是'吸血鬼'數字
1260 = 21 * 60
1827 = 21 * 87
2187 = 27 * 81
static void vampire(){ /* 思路: 1、過濾掉不符合條件的 2、將乘積結果轉化為字串去對比兩個乘數 3、迴圈對比結果每一位字元和兩個乘數字符位數 */ int max=99; //儲存 Set<String> vampires=new HashSet<>(); for (int i = 10; i < max; i++) { for (int j = 10; j < max; j++) { int result=i*j; //過濾兩個0結尾的數字,和<=1000的數字 if(i%10==0&&j%10==0||result<1000){ continue; } //查詢result是否包含i或j String iS=i+""; String jS=j+""; //對比結果,只有全匹配通過才全部為true boolean compareResult[]=new boolean[4]; //記錄該位置的值是否已經對比使用過 boolean iHasUse[]=new boolean[2]; boolean jHasUse[]=new boolean[2]; //當前索引 int index=0; for (char c : (result + "").toCharArray()) { String single=c+""; //標記是否從第一位數中找到 boolean hasFind=false; //從第一位數中查詢 for (int q = 0; q < iS.toCharArray().length; q++) { if(single.equals(iS.charAt(q)+"")){ if(iHasUse[q]){//已經使用該值對比過 continue; } compareResult[index]=true; iHasUse[q]=true; hasFind=true; } } //第一位數中不存在,繼續在第二位數中查詢 if(!hasFind){ //從第二位數中查詢 for (int q = 0; q < jS.toCharArray().length; q++) { if(single.equals(jS.charAt(q)+"")){ if(jHasUse[q]){//已經使用該值對比過 continue; } compareResult[index]=true; jHasUse[q]=true; } } } index++; } boolean isVampire = true; for (boolean b : compareResult) { if(!b){ isVampire=b; break; } } if(isVampire){ vampires.add(result+""); System.out.println("Vampire========>"+i+" * "+j+" = "+(i*j)); } } } System.out.println("吸血鬼數字=========="); for (String vampire : vampires) { System.out.println(vampire); } System.out.println("吸血鬼數字=========="); }