关于吸血鬼数字的解释我就不写了,原文在:
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组吸血鬼数
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组吸血鬼数
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相等就避免的数字的重复出现
Math.max
返回两个 int 值中较大的一个。
Math.min
返回两个 int 值中较小的一个。
返回两个 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
返回两个 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都不相等啊
因为在i等于15的时候j等于16
你还没明白吗?
我这里有一个以前写的比较简单一点
你看看吧
http://www.cnblogs.com/kao331431214/archive/2009/01/22/1380104.html
//条件: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,这个得从数学角度理解。