Python多层嵌套循环简化 数字谜题暴力求解代码优化咨询
数字谜题暴力枚举代码优化咨询
问题说明
我需要求解一道数字谜题:找到所有满足 ABCD * 3 = EFGHI 的数字组合,约束条件如下:
- A、B、C、D、E、F、G、H、I 共9个数字互不重复
- 所有数字取值范围为0-9,且均不能等于3
谜题的竖式形式为:
**** × 3 ------ *****
所有*位置的数字满足上述约束,乘数3为题目固定值。
初始实现
我最初通过9层嵌套循环写了暴力枚举的版本,代码如下:
# 谜题形式: **** # X 3 # = ***** # 要求所有*代表的数字互不重复,取值为0-9且不含3(3为固定乘数位) import time t1 = time.time() occurence = 0 for a in range(0,10): if a == 3 : continue tn = time.time() delta = tn - t1 # 要求a,b,c,d,e,f,g,h,i为0-9范围内互不重复、且不等于3的数字 for b in range(0,10): if a == b or b == 3 : continue for c in range(0,10): if a == c or b ==c or c == 3 : continue for d in range(0,10): if d==a or d==b or d==c or d == 3 : continue for e in range(0,10): if e==a or e==b or e==c or e==d or e == 3: continue for f in range(0,10): if f ==a or f==b or f==c or f==d or f==e or f == 3: continue for g in range(0,10): if g ==a or g==b or g==c or g==d or g==e or g==f or g == 3: continue for h in range(0,10): if h ==a or h==b or h==c or h==d or h==e or h==f or h==g or h == 3: continue for i in range(0,10): if i == a or i==b or i==c or i==d or i==e or i==f or i==g or i==h or i == 3: continue first = 1000*a + 100*b + 10*c + d result = 10000*e + 1000*f + 100*g + 10*h + i if (first *3 == result): # 找到有效解 occurence +=1 print(first, "* 3 =", result) t2 = time.time() print(occurence, "个有效结果") print(t2-t1, "秒")
这个版本嵌套层级太深,代码冗余度很高。
咨询诉求
我认为可以借助列表、排列组合相关的Python特性大幅精简这段代码,希望得到可行的优化方案。
内容的提问来源于stack exchange,提问作者jolrael
相关产品推荐
相关产品推荐

