[] []
X []
-----------
[] []
+ [] []
-----------
[] []
题目中一共9个数,分别为1到9,并且没有重复。
第一种解法:
那么这9个数我分别记为A,B,C,D,E,F,G,H,I,每个字母代表一个1到9之间的数,根据题意不同字母所代表数字不同。
那么可以转化为以下 式子:
AB * C = DE
DE + FG = HI
'''
arr = [1,2,3,4,5,6,7,8,9]
for a in arr:
for b in arr:
if b == a: continue
for c in arr:
if c in [a, b]: continue
de = (a * 10 + b) * c
d = de // 10
e = de % 10
if d >= 10 or d == 0: continue
if e == 0: continue
if d in [a,b,c,e]: continue
if e in [a,b,c,d]: continue
for f in arr:
if f in [a,b,c,d,e]: continue
for g in arr:
if g in [a,b,c,d,e,f]: continue
hi = de + f * 10 + g
h = hi // 10
i = hi % 10
if h >= 10 or h == 0: continue
if i == 0: continue
if h not in [a,b,c,d,e,f,g,i] and i not in [a,b,c,d,e,f,g,h]:
print("this is the correct answer: ", a,b,c,d,e,f,g,h,i)
'''
this is the correct answer: 1 7 4 6 8 2 5 9 3
'''
第二种解法:其实只是优化了下代码。
那么这9个数我分别记为A1,A2,B,C1,C2,D1,D2,E1,E2,每个字母代表一个1到9之间的数,根据题意不同字母所代表数字不同。
那么可以转化为以下 式子:
A1 A2
X B
---------
C1 C2
+ D1 D2
---------
E1 E2
A1A2 * B = C1C2
C1C2 + D1D2 = E1E2
'''
def diff(a, b):
'''计算两个集合的差集,相当于第一个集合减去两个集合的交集。
例如输入 a=[1,2,3,4], b=[3,5], 则会返回[1,2,4]
'''
return list(set(a).difference(set(b)))
arr = [1,2,3,4,5,6,7,8,9]
for a1 in arr:
for a2 in diff(arr, [a1]):
for b in diff(arr, [a1, a2]):
c1c2 = (a1 * 10 + a2) * b
c1 = c1c2 // 10
c2 = c1c2 % 10
if c1 >= 10 or c1 == 0 or c1 in [a1,a2,b,c2]: continue
if c2 == 0 or c2 in [a1,a2,b,c1]: continue
for d1 in diff(arr, [a1,a2,b,c1,c2]):
for d2 in diff(arr, [a1,a2,b,c1,c2,d1]):
e1e2 = c1c2 + d1 * 10 + d2
e1 = e1e2 // 10
e2 = e1e2 % 10
if e1 >= 10 or e1 == 0 or e1 in [a1,a2,b,c1,c2,d1,d2,e2]: continue
if e2 == 0 or e2 in [a1,a2,b,c1,c2,d1,d2,e1]: continue
print("this is the correct answer: ", a1,a2,b,c1,c2,d1,d2,e1,e2)
'''
this is the correct answer: 1 7 4 6 8 2 5 9 3
'''