关于吸血鬼数字的解释我就不写了,原文在: 
http://blog.csdn.net/java2000_net/archive/2009/01/23/3851203.aspx 希望能解决里面的关键代码 Java code       
 from = Math.max(1000 / i, i + 1); 
to = Math.min(10000 / i, 100); 我不太明白这段代码
是如何做到让它把重复的数字给去掉的,我有试过如果不用这二个值,则运行出来是
第1组: 15*93=1395
第2组: 21*60=1260
第3组: 21*87=1827
第4组: 27*81=2187
第5组: 30*51=1530
第6组: 35*41=1435
第7组: 41*35=1435
第8组: 51*30=1530
第9组: 60*21=1260
第10组: 80*86=6880
第11组: 81*27=2187
第12组: 86*80=6880
第13组: 87*21=1827
第14组: 93*15=1395
共找到14组吸血鬼数而用了这二个值以后的结果就是
第1组: 15*93=1395
第2组: 21*60=1260
第3组: 21*87=1827
第4组: 27*81=2187
第5组: 30*51=1530
第6组: 35*41=1435
第7组: 80*86=6880
共找到7组吸血鬼数

解决方案 »

  1.   

    // j=i+1避免重复   
          from = Math.max(1000 / i, i + 1);   
          to = Math.min(10000 / i, 100);   
    for (int j = from; j < to; j++) { j=i+1
    也就是说j永远不与i相等(比他大一)
    避免j与i相等就避免的数字的重复出现
      

  2.   

    再来看看Math.max方法和Math.min方法
    Math.max
    返回两个 int 值中较大的一个。
    Math.min
    返回两个 int 值中较小的一个。
      

  3.   

    Math.min 
    返回两个 int 值中较小的一个。 
     to = Math.min(10000 / i, 100);  因为i<100所以to永远为100 (就算i=99了 10000/i 还是> 100)
    这个min方法在这里我觉得是没什么用的Math.max 
    返回两个 int 值中较大的一个。
      from = Math.max(1000 / i, i + 1);  
    这里就不同了有时候返回的是1000/i 有时候是i+1
    为什么要i+1呢?看i_val = i * j; 
    i和j是不能相等的(相等就会出现14组的情况)
    比如 15*93=1395 
    i是15 j是93
    还有一种是i是93 j是15
    你知道这个是同一种情况 开始计算机它不知道
    所以不能让i的值等于j
      

  4.   

    Math.max 
    返回两个 int 值中较大的一个。 
      from = Math.max(1000 / i, i + 1);  
    这里就不同了有时候返回的是1000/i 有时候是i+1 
    为什么要i+1呢? 看i_val = i * j; 
    i和j是不能相等的(相等就会出现14组的情况) 
    比如 15*93=1395 
    i是15 j是93                     //1
    还有一种是i是93 j是15            //2
    你知道这个是同一种情况 开始计算机它不知道 
    所以不能让i的值等于j
    这不管是1,还是2.。i和j都不相等啊
      

  5.   

    是这样的如果i等于15了j就不可能等于15了
    因为在i等于15的时候j等于16
      

  6.   

    不好意思,昨天没有看到你的留言
    你还没明白吗?
    我这里有一个以前写的比较简单一点 
    你看看吧
    http://www.cnblogs.com/kao331431214/archive/2009/01/22/1380104.html
      

  7.   

    //from和to的值作用是:
    //条件:999<i*j<10000,999/i<j<10000/i,9<i<100, 9<j<100
    //设置一个中间值9<x<100,当9<i<x时,999/x<j<100;当x<i<100时,9<j<10000/x
    //所以i在<x时,999/x<j(而j>=1000/i>1000/x)且j又须取大于i的值(即j>=i+1,避免i1和j2重复),所以获取1000/i和i+1之间的更大值,从此值开始遍历,即是Math.max(1000 / i, i + 1)
    //to的作用决定了无论怎么取最小值,都肯定是遍历上限到100,这个得从数学角度理解。