吸血鬼数字实现算法(1)

题目:吸血鬼数字是指位数为偶数的数字,可以有一对数字相乘而得到,而这对数字各包含成绩的一半位数的数字,其中成那个最出的数字总选取的数字可以任意排序,一两个0结尾的数字是不允许的,例如,下列数字都是吸血鬼数字:
1260=2160
1827=21
87
2178=27*81
找出4位数的所有吸血鬼数字。
代码实现:

public class xiXueGui {
    public static void main(String[] args){
        int[] num = new int[4];
        for(int i=1000;i<10000;i++){
            if(i%100!=0){
                num[0]=i/1000;
                num[1]=(i%1000)/100;
                num[2]=((i%1000)%100)/10;
                num[3]=((i%1000)%100)%10;
                if((num[0]*10+num[1])*(num[2]*10+num[3])==i||(num[0]*10+num[1])*(num[3]*10+num[2])==i||
                        (num[1]*10+num[0])*(num[2]*10+num[3])==i||(num[1]*10+num[0])*(num[3]*10+num[2])==i||
                        (num[0]*10+num[2])*(num[1]*10+num[3])==i||(num[0]*10+num[2])*(num[3]*10+num[1])==i||
                        (num[2]*10+num[0])*(num[1]*10+num[3])==i||(num[2]*10+num[0])*(num[3]*10+num[1])==i||
                        (num[0]*10+num[3])*(num[1]*10+num[2])==i||(num[0]*10+num[3])*(num[2]*10+num[1])==i||
                        (num[3]*10+num[0])*(num[1]*10+num[2])==i||(num[3]*10+num[0])*(num[2]*10+num[1])==i){
                    System.out.println(i);
                }
            }
        }

    }
}

在网上看到通过字符串实现吸血鬼数据算法,相当巧妙,参考网址:https://www.cnblogs.com/Sabre/p/7640550.html。
具体实现代码为:

public class XIXUEGUI2 {
        public static void main(String[] args){
            String[] ar_str1, ar_str2;
            int sum = 0;
            for (int i = 10; i < 100; i++) {
                for (int j = i + 1; j < 100; j++) {
                    int i_val = i * j;
                    if (i_val < 1000 || i_val > 9999)
                        continue; // 只找4位的吸血鬼数据
                    ar_str1 = String.valueOf(i_val).split("");//把四位数据分割成长度为4的字符串数组
                    ar_str2 = (String.valueOf(i) + String.valueOf(j)).split("");//先把两个两位数组链接成一个字符串,在分割成一个四位的字符串数组
                    java.util.Arrays.sort(ar_str1);//对原有4位字符串数组进行排序
                    java.util.Arrays.sort(ar_str2);//对链接成的4位字符串数组进行排序
                    if (java.util.Arrays.equals(ar_str1, ar_str2)) {
                        // 若两个数组相同,则为吸血鬼数字
                        sum++;
                        System.out.println("第" + sum + "组: " + i + "*" + j + "=" + i_val);
                    }
                }
            }
            System.out.println("共找到" + sum + "组吸血鬼数");
        }
}

若要找到6位或者8位的吸血鬼数据,更改循环范围即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值