【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("吸血鬼数字==========");
    }


猜你喜欢

转载自blog.csdn.net/dqmj2/article/details/78181008
今日推荐