您的位置:首页 > 其它

project euler 38

2015-12-04 21:18 363 查看


Problem
38

Pandigital multiples

Take the number 192 and multiply it by each of 1, 2, and 3:

192 × 1 = 192

192 × 2 = 384

192 × 3 = 576

By concatenating each product we get the 1 to 9 pandigital, 192384576. We will call 192384576 the concatenated product of 192 and (1,2,3)

The same can be achieved by starting with 9 and multiplying by 1, 2, 3, 4, and 5, giving the pandigital, 918273645, which is the concatenated product of 9 and (1,2,3,4,5).

What is the largest 1 to 9 pandigital 9-digit number that can be formed as the concatenated product of an integer with (1,2, … ,n) where n > 1?

全数字的倍数

将192分别与1、2、3相乘:

192 × 1 = 192

192 × 2 = 384

192 × 3 = 576

连接这些乘积,我们得到一个1至9全数字的数192384576。我们称192384576为192和(1,2,3)的连接乘积。

同样地,将9分别与1、2、3、4、5相乘,得到1至9全数字的数918273645,即是9和(1,2,3,4,5)的连接乘积。

对于n > 1,所有某个整数和(1,2, … ,n)的连接乘积所构成的数中,最大的1至9全数字的数是多少?

@Test
public void test() {

Map<Integer, Integer> map = new HashMap<Integer, Integer>();

for( int i = 2; i < 10000; i ++){

String valStr = Integer.toString(i);

int n = 1;
while( valStr.length() < 9){
valStr = valStr.concat( Integer.toString(i * (++n)) );
}

if( checkNum( valStr)){
map.put(i, Integer.valueOf(valStr));
}

}
int maxVal = 0;
int maxId = 0;
for( Entry<Integer, Integer> entry : map.entrySet()){
if( entry.getValue() > maxVal){
maxVal = entry.getValue();
maxId = entry.getKey();
}
}

System.out.println("maxId=" + maxId + " | maxVal=" + maxVal);

}

private boolean checkNum(String valStr) {

if( valStr.length() != 9){
return false;
}

return valStr.contains("1")
&& valStr.contains("2")
&& valStr.contains("3")
&& valStr.contains("4")
&& valStr.contains("5")
&& valStr.contains("6")
&& valStr.contains("7")
&& valStr.contains("8")
&& valStr.contains("9");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: