24小时热门版块排行榜    

查看: 1094  |  回复: 3
本帖产生 2 个 程序强帖 ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

holmescn

金虫 (正式写手)

[交流] Euler 工程 第三十二题:pandigital 数 已有2人参与

如果一个n位数包含1到n这n个数每个数字仅一次,那么我们称这个数为一个pandigital数。比如15234是一个5位的pandigital数。

7254这个数很特别,因为39x186=7254,其它的被乘数、乘数、积构成一个1到9的pandigital数。

找到所有的被乘数/乘数/积构成1到9的pandigital数的积,求这些积的和。

注意:有些积可以通过不同的乘数被乘数得到,不要多加了。
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

★ ★ ★
余泽成(金币+3, 程序强帖+1): 鼓励交流! 2011-06-26 00:16:10
改进版的穷举,python版
CODE:
from itertools import permutations

numbers = set(range(1,10))
results = []

for num in permutations(numbers, 4):
    n = int("%d"*4 % num)

    subset = numbers - set(num)

    # for #*####
    for x in subset:
        if n % x == 0:
            div = set([int(c) for c in str(n/x)])
            if len(div) == 4 and x not in div and div.issubset(subset):
                results.append(n)
                print "%d*%d=%d" % (x, n/x, n)
                break

    # for ##*###
    for x in permutations(subset, 2):
        xx = int("%d"*2 % x)
        if n % xx == 0:
            div = set([int(c) for c in str(n/xx)])
            if len(div) == 3 and x[0] not in div and x[1] not in div and div.issubset(subset):
                results.append(n)
                print "%d*%d=%d" % (xx, n/xx, n)
                break

print sum(set(results))

有些逻辑还是太啰嗦,没有找到数学上更好的表达。有待改进。
4楼2011-06-25 21:32:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 holmescn 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见