1. 程式人生 > >【Java學習筆記】吸血鬼數

【Java學習筆記】吸血鬼數

吸血鬼數字,是指數位為偶數的數字,可以由一對數字相乘而得到,而這對數字各包含
乘積的一半位數的數字,其中從最初的數字中選取的數字可以任意排序。
以兩個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("吸血鬼數字==========");
    }