Problem 38 Pandigital multiples

2016-10-19 10:02:00   技术   projecteulor python

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全数字的数是多少?

numbers = []
result_number = 0
result_result = 0


def check(number):
    str_number = str(number)
    if '0' in str_number:
        return False
    for s in str_number:
        if str_number.count(s) > 1:
            return False
    return True

for i in reversed(range(1, 9876)):
    if check(i):
        numbers.append(i)

for i in numbers:
    result = ''
    for n in range(1, 5):
        result += str(i * n)
        if not check(eval(result)):
            break
        if len(result) >= 9:
            if eval(result) > result_result:
                result_result = eval(result)
                result_number = i
            for j in range(1, n + 1):
                print "%s * %s = %s" % (i, j, i * j)
            print
            break

print result_number, result_result

其实不用循环,因为第一个肯定是最大的,我原来还想着直接用草稿纸算……

评论已关闭。
评论共