A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qq771711301 中级黑马   /  2016-4-1 20:34  /  1037 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

不用源码,只要提供思路或部分核心代码即可,感谢!
吸血鬼数字是四位数的偶数,又一对数字相乘得到,这对数字各包含乘积的一半位数的数字,其中从最初的数字中选区的数字可以任意排序。例:
1260 = 21 * 60
1827 = 21 * 87
2187 = 27 * 81

4 个回复

倒序浏览
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;           //一旦满足计算下一个数,不再循环其他的排列方式
                                                }
                                        }       
                                }
                        }
                }
        }
}
回复 使用道具 举报 1 0
眯眯神 发表于 2016-4-2 19:32
import java.io.File;
import java.lang.reflect.Array;
import java.util.ArrayList;

感谢,我自己也想出来了一种写法,还是感谢你提供的思路
回复 使用道具 举报
话说第一次听说吸血鬼数,二楼大神
回复 使用道具 举报
qq771711301 发表于 2016-4-2 23:16
感谢,我自己也想出来了一种写法,还是感谢你提供的思路

= =我感觉能递归,然而没想的出来
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马