输出四位数中所有吸血鬼数 [java重学]

来源:互联网 发布:淘宝上买东西怎样付款 编辑:程序博客网 时间:2024/05/02 01:58
import java.util.Arrays; 
/**
 * 一、吸血鬼数字的两个因子不能同时以0结尾,故用条件i_val % 100 == 0 先过滤一次。
 * 二、任何4位数i_val都可以表示为1000a+100b+10c+d
 * 如果其是吸血鬼数字,其两个因子是i和j,那么i+j只能有以下六种情况:
 * 1.(i+j)=10a+b+10c+d
 * 2.(i+j)=10a+10b+c+d
 * 3.(i+j)=10a+b+c+10d
 * 4.(i+j)=a+10b+c+10d
 * 5.(i+j)=a+10b+10c+d
 * 6.(i+j)=a+b+10c+10d
 * 所以无论上述的哪种情况下i_val-(i+j)都一定能被9整除,故不满足这个条件的一定不是吸血鬼数字,
 * 所以通过条件(i_val - i - j) % 9 != 0再过滤一次。
 */
public class Vampire { 
  public static void main(String[] arg) { 
    String[] ar_str1, ar_str2; 
    int sum = 0; 
    int from; 
    int to; 
    int i_val; 
    int count = 0; 
    for (int i = 10; i < 100; i++) { 
      from = Math.max(1000 / i, i + 1); 
      to = Math.min(10000 / i, 100);    //确保i*j是一个四位数
      for (int j = from; j < to; j++) { 
        i_val = i * j; 
        if (i_val % 100 == 0 || (i_val - i - j) % 9 != 0) { 
          continue; 
        } 
        count++; 
        ar_str1 = String.valueOf(i_val).split(""); 
        ar_str2 = (String.valueOf(i) + String.valueOf(j)).split("");  
        Arrays.sort(ar_str1); 
        Arrays.sort(ar_str2); 
        if (Arrays.equals(ar_str1, ar_str2)) {// 排序后比较,为真则找到一组 
          sum++; 
          System.out.println("第" + sum + "组: " + i + "*" + j + "=" + i_val); 
        } 
      } 
    } 
    System.out.println("共找到" + sum + "组吸血鬼数"); 
    System.out.println(count); 
  } 
}
0 0
原创粉丝点击