题目:
由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
请填写该数字,通过浏览器提交
超烂的暴力解法:
import itertools
result = []
x = list(range(10))
a = list(itertools.permutations(x, 4))
for i in a:
if i[0] == 0:
continue
#分为1*3 2*2 3*1 三种情况
a = i[0]
b = i[1]*100+i[2]*10+i[3]
c = i[0]*10+i[1]
d = i[2]*10+i[3]
e = i[0]*100+i[1]*10+i[2]
f = i[3]
r1 = list(str(a*b))
r2 = list(str(c*d))
r3 = list(str(e*f))
r1, r2, r3 = list(map(int, r1)), list(map(int, r2)), list(map(int, r3))
i = list(i)
i.sort(), r1.sort(), r2.sort(), r3.sort()
#进行对照,看是否是四个一样的数字
if r1 == i:
j = [a, b]
if j not in result:
result.append(j)
elif r2 == i:
j = [c, d]
j.sort
if j not in result:
result.append(j)
elif r3 == i:
j = [e, f]
if j not in result:
result.append(j)
#去除满足乘法交换律的结果
res = result[:]
for k in result:
result = res[:]
p = len(result)
for h in range(1, p):
if k[0] == result[h][1] and k[1] == result[h][0]:
res.remove(k)
print(len(res))