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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

《Thinking in Java》(中文第四版)中第4章的练习10
/**
* 找出四位数的所有吸血鬼数字
* 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序.
* 以两个0结尾的数字是不允许的。
*   例如下列数字都是吸血鬼数字
1260=21*60
1827=21*87
2187=27*81
*/
/*
Exercise 10: (5) A vampire number has an even number of digits and is formed by
multiplying a pair of numbers containing half the number of digits of the result. The digits
are taken from the original number in any order. Pairs of trailing zeroes are not allowed.
Examples include:
1260 = 21 * 60
1827 = 21 * 87
2187 = 27 * 81
Write a program that finds all the 4-digit vampire numbers. (Suggested by Dan Forhan.)
*/

public class J010 {
        public static void main (String[] args) {
                int count0 = 0;
                for(int i = 1000 ; i < 10000 ; i++ ) {
                        if( i%100 != 0 ){
                                count0++;
                                process(i);
                        }
                }
                System.out.println( " count0 = " + count0 );
        }
        public static void process ( int target) {
                boolean flag = false;
                int x = 0;
                int y = 0;
                int count1 = 0;
                int count2 = 0;
                int count3 = 0;
                int count4 = 0;
                for(int i = 10 ; i < 100 ; i++ ) {
                        if( flag ){
                                break;
                        }
                        count1++;
                        for( int j =10 ; j < 100 ; j++) {
                                count2++;
                                if( i * j > target){
                                        break;
                                }
                                else if ( i * j == target) {
                                        count3++;
                                        if (isVampire(i,j,target)) {
                                                count4++;
                                                System.out.println( target + " = " + i + " * " +j);
                                                flag = true ;

                                        }
                                }
                        }
                }
                //System.out.println( " count1 = " + count1 );
                //System.out.println( " count2 = " + count2 );
                //System.out.println( " count3 = " + count3 );
                //System.out.println( " count4 = " + count4 );
                       

        }
/*
  public static boolean isVampire (int x , int y , int target) {
        String[] ar_str1, ar_str2;
        ar_str1 = String.valueOf(target).split("");
        ar_str2 = (String.valueOf(x) + String.valueOf(y)).split("");
            Arrays.sort(ar_str1);
            Arrays.sort(ar_str2);
        if (Arrays.equals(ar_str1, ar_str2)) {// 排序后比较,为真则找到一组
            return true;
        }
        return false;
    }
*/

        public static boolean isVampire (int x , int y , int target) {

                int d1 = x / 10;
                int d2 = x % 10;

                int d3 = y / 10;
                int d4 = y % 10;

                if((d1*1000+d2*100+d3*10+d4*1) == target)
                        return true;
                else if((d1*1000+d2*100+d4*10+d3*1) == target)
                        return true;
                else if((d1*1000+d3*100+d2*10+d4*1) == target)
                        return true;
                else if((d1*1000+d3*100+d4*10+d2*1) == target)
                        return true;
                else if((d1*1000+d4*100+d2*10+d3*1) == target)
                        return true;
                else if((d1*1000+d4*100+d3*10+d2*1) == target)
                        return true;


                else if((d2*1000+d1*100+d3*10+d4*1) == target)
                        return true;
                else if((d2*1000+d1*100+d4*10+d3*1) == target)
                        return true;
                else if((d2*1000+d3*100+d1*10+d4*1) == target)
                        return true;
                else if((d2*1000+d3*100+d4*10+d1*1) == target)
                        return true;
                else if((d2*1000+d4*100+d1*10+d3*1) == target)
                        return true;
                else if((d2*1000+d4*100+d3*10+d1*1) == target)
                        return true;


                else if((d3*1000+d1*100+d2*10+d4*1) == target)
                        return true;
                else if((d3*1000+d1*100+d4*10+d2*1) == target)
                        return true;
                else if((d3*1000+d2*100+d1*10+d4*1) == target)
                        return true;
                else if((d3*1000+d2*100+d4*10+d1*1) == target)
                        return true;
                else if((d3*1000+d4*100+d1*10+d2*1) == target)
                        return true;
                else if((d3*1000+d4*100+d2*10+d1*1) == target)
                        return true;

                else if((d4*1000+d1*100+d2*10+d3*1) == target)
                        return true;
                else if((d4*1000+d1*100+d3*10+d2*1) == target)
                        return true;
                else if((d4*1000+d2*100+d1*10+d3*1) == target)
                        return true;
                else if((d4*1000+d2*100+d3*10+d1*1) == target)
                        return true;
                else if((d4*1000+d3*100+d1*10+d2*1) == target)
                        return true;
                else if((d4*1000+d3*100+d2*10+d1*1) == target)
                        return true;
               
                else
                        return false;
               

        }

       
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马