Project Euler Problem 32

来源:互联网 发布:小嶋阳菜毕业知乎 编辑:程序博客网 时间:2024/05/20 22:30

Project Euler problem 32.


We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once; for example, the 5-digit number, 15234, is 1 through 5 pandigital.

The product 7254 is unusual, as the identity, 39 × 186 = 7254, containing multiplicand, multiplier, and product is 1 through 9 pandigital.

Find the sum of all products whose multiplicand/multiplier/product identity can be written as a 1 through 9 pandigital.

HINT: Some products can be obtained in more than one way so be sure to only include it once in your sum.


### 2 * 3productSet = set()productList = []for i in range (10, 100):    for j in range (100, 1000):        if i * j > 9999:            break        elif i * j <= 9999:            product = i * j            digitNumbers = set()            firstNum = i % 10            if firstNum != 0:                digitNumbers.add(firstNum)            else:                continue            secondNum = (i - i % 10) / 10            if secondNum in digitNumbers:                continue            else:                digitNumbers.add(secondNum)            thirdNum = j % 10            if thirdNum in digitNumbers or thirdNum == 0:                continue            else:                digitNumbers.add(thirdNum)            fourthNum = (j % 100 - j % 10) / 10            if fourthNum in digitNumbers or fourthNum == 0:                continue            else:                digitNumbers.add(fourthNum)            fifthNum = (j - j % 100) / 100            if fifthNum in digitNumbers:                continue            else:                digitNumbers.add(fifthNum)            sixthNum = (product - product % 1000) / 1000            if sixthNum in digitNumbers:                continue            else:                digitNumbers.add(sixthNum)            seventhNum = (product % 1000 - product % 100) / 100            if seventhNum in digitNumbers or seventhNum == 0:                continue            else:                digitNumbers.add(seventhNum)            eighthNum = (product % 100 - product % 10) / 10            if eighthNum in digitNumbers or eighthNum == 0:                continue            else:                digitNumbers.add(eighthNum)            ninthNum = product % 10            if ninthNum in digitNumbers or ninthNum == 0:                continue            else:                if product not in productSet:                    productSet.add(product)                    productList.append(product)                    print i, "*", j, "=", product### 1 * 4for i in range(1, 10):    for j in range(1000, 10000):        if i * j > 9999:            break        elif i * j <= 9999:            product = i * j            digitNumbers = set()            firstNum = i            digitNumbers.add(firstNum)            secondNum = j % 10            if secondNum in digitNumbers:                continue            else:                digitNumbers.add(secondNum)            thirdNum = (j % 100 - j % 10) / 10            if thirdNum in digitNumbers or thirdNum == 0:                continue            else:                digitNumbers.add(thirdNum)            fourthNum = (j % 1000 - j % 100) / 100            if fourthNum in digitNumbers or fourthNum == 0:                continue            else:                digitNumbers.add(fourthNum)            fifthNum = (j - j % 1000) / 1000            if fifthNum in digitNumbers:                continue            else:                digitNumbers.add(fifthNum)            sixthNum = (product - product % 1000) / 1000            if sixthNum in digitNumbers:                continue            else:                digitNumbers.add(sixthNum)            seventhNum = (product % 1000 - product % 100) / 100            if seventhNum in digitNumbers or seventhNum == 0:                continue            else:                digitNumbers.add(seventhNum)            eighthNum = (product % 100 - product % 10) / 10            if eighthNum in digitNumbers or eighthNum == 0:                continue            else:                digitNumbers.add(eighthNum)            ninthNum = product % 10            if ninthNum in digitNumbers or ninthNum == 0:                continue            else:                if product not in productSet:                    productSet.add(product)                    productList.append(product)                    print i, "*", j, "=", productresult = 0for i in range(0, len(productList)):    result += productList[i]print result



solved using Python. the answer is 45228.

0 0
原创粉丝点击