Java复习笔记6【求四位吸血鬼数字】

来源:互联网 发布:node 绑定域名 编辑:程序博客网 时间:2024/06/05 03:07
package com.lesson8.test;/* * 【题目】吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘得到,而这对数字的位数是原数字的一半位数, * 并且由组成原数字的各个位数组成,以两个0结尾的数字不是吸血鬼数字。 * 例如:1260 = 21 * 60    1827 = 21 * 87    2187= 27 * 81 , * 求所有四位吸血鬼数字 * *//* * 【解题思路】当前的解题思路很简单暴力,主要是利用枚举法,排序也是自定义的函数,并不复杂 * 1.利用枚举法:由于将所有四位数枚举一遍不能够得到由两个两位数相乘的四位数,因此需要枚举两位数, *  得到可能为吸血鬼数字的四位数 *  即 x * y = z, x和 y是两位数,z是四位数 * 2.判断是否为吸血鬼数字:这对数字由组成原数字的各个位数组成,则只要所有位数相同就是吸血鬼数字 *  即 x * y = z,组成x和y的4个数和组成z的4个数相同 * 3.如何判断所有位数相同:将所有位数按序排列,最后得到两个内部有序的数字进行比较 * x * y = z,x和y的4个数排序后得到数字m,z内部位数排序后得到数字n,如果m == n, *  表示x和y的4个数和z的4个数相同,否则表示存在不同的位数,则不是吸血鬼数   * *///以1260 = 21 * 60 为例//1260-----排序后为6210//21 * 60------排序后为6210public class Test { /*  * 该方法用于枚举两位数,并判断是否为吸血鬼数字  * */ public void getNum(){  for(int x = 10; x <= 99; x++){   for(int y = x; y <= 99; y++){ //y=x避免重复    if(x * y < 1000 || x * y > 10000){     continue; //如果x*y不是四位数,则不符合条件,继续遍历    }    //判断是否为吸血鬼数字    if(sort(x*100+y) == sort(x*y)){     System.out.println(x + " * " + y + " = " + x*y);    }   }  } } /*  * 该方法用于对给定四位数进行内部排序(递减)  * @param num int  * return int 排序后得到的最大数  * */ public int sort(int num){  int n1 = num / 1000;  int n2 = num % 1000 / 100;  int n3 = num % 100 / 10;  int n4 = num % 10;  //一般三个以上数字的排序都可以转化成三个数字的排序,  //三个数字的排序则就是求最大、最小、中间值的固定套路  int max = getMax(n1, getMax(n2, getMax(n3, n4)));  int last3 = 0;//用来存储除最大数外其余三位数组成的最大数  if(n1 == max){   last3 = last3(n2, n3, n4);  }else if(n2 == max){   last3 = last3(n1, n3, n4);  }else if(n3 == max){   last3 = last3(n1, n2, n4);  }else{   last3 = last3(n1, n2, n3);  }  return (max * 1000 + last3); } /*  * 该方法用于获取最大值  * */ public int getMax(int x, int y){  return x>y?x:y; } /*  * 该方法用于获取最小值  * */ public int getMin(int x,int y){  return x>y?y:x; } /*  * 该方法用于得到除最大数外其余三位数组成的最大数  * */ public int last3(int x,int y,int z){  int max = getMax(x,getMax(y,z));  int min = getMin(x,getMin(y,z));  int mid = x + y + z - max - min;  return (max*100+mid*10+min); }  public static void main(String args[]){  Test t = new Test();  t.getNum(); }}



0 0