黑马程序员技术交流社区

标题: 吸血鬼数用java写的思路? [打印本页]

作者: qq771711301    时间: 2016-4-1 20:34
标题: 吸血鬼数用java写的思路?
不用源码,只要提供思路或部分核心代码即可,感谢!
吸血鬼数字是四位数的偶数,又一对数字相乘得到,这对数字各包含乘积的一半位数的数字,其中从最初的数字中选区的数字可以任意排序。例:
1260 = 21 * 60
1827 = 21 * 87
2187 = 27 * 81
作者: 眯眯神    时间: 2016-4-2 19:32
import java.io.File;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collections;

public class Test_03 {
        public static void main(String[] args) {
                 //从1000开始循环到9998,
                abc:for(int x=1000;x<10000;x+=2){            
                //分别获取4位数上的数字
                        int a=x/1000;//千位
                        int b=(x/100)%10;//百位
                        int c=(x%100)/10;//十位
                        int d=x%10;//个位
        /*        在循环中将其加入集合,用循环遍历所有取出的顺序,按照顺序前两个组成第一个数,后两个组成第二个数
                如果两个数相乘等于x,那么x满足条件,计算下一个x  */
                        for(int i=0;i<4;i++){                  //在四个数中取出第一个数,循环四种可能
                                ArrayList<Integer> arr1=new ArrayList<Integer>();
                                Collections.addAll(arr1, a,b,c,d);
                                int e=arr1.get(i);
                                arr1.remove(i);
                                for(int j=0;j<3;j++){              //在剩下的三个数中取出第二个,依然循环
                                        ArrayList<Integer> arr2=new ArrayList<Integer>();
                                        Collections.addAll(arr2, arr1.get(0),arr1.get(1),arr1.get(2));
                                        int f=arr2.get(j);
                                        arr2.remove(j);
                                        for(int m=0;m<2;m++){              //第三个和第四个一起取出,用循环可以循环出两种顺序
                                                ArrayList<Integer> arr3=new ArrayList<Integer>();
                                                Collections.addAll(arr3, arr2.get(0),arr2.get(1));
                                                int g=arr3.get(m);
                                                int h=arr3.get(1-m);
                                                if(x==(e*10+f)*(g*10+h)){     //判断是否有一种可能让x满足吸血鬼数
                                                        System.out.print(x+"=  ");
                                                        System.out.println((e*10+f)+"*"+(g*10+h));
                                                        continue abc;           //一旦满足计算下一个数,不再循环其他的排列方式
                                                }
                                        }       
                                }
                        }
                }
        }
}
作者: qq771711301    时间: 2016-4-2 23:16
眯眯神 发表于 2016-4-2 19:32
import java.io.File;
import java.lang.reflect.Array;
import java.util.ArrayList;

感谢,我自己也想出来了一种写法,还是感谢你提供的思路
作者: zapple926    时间: 2016-4-2 23:41
话说第一次听说吸血鬼数,二楼大神
作者: 眯眯神    时间: 2016-4-4 14:52
qq771711301 发表于 2016-4-2 23:16
感谢,我自己也想出来了一种写法,还是感谢你提供的思路

= =我感觉能递归,然而没想的出来




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2