黑马程序员技术交流社区

标题: 到8月23号为止的学习状况,许我以一道编程题目解决情况来表示 [打印本页]

作者: 易之规    时间: 2018-8-23 19:49
标题: 到8月23号为止的学习状况,许我以一道编程题目解决情况来表示
《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;
               

        }

       
}




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