目录
题目:
由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
分析:
四个数字,分两组。
1.一组一个数字,另一组三个数字。
2.一组两个数字,另一组也是两个数字。
3.以上两组的乘积结果仍是由四位不相同的数字组成,且这四个数字与乘数与被乘数相 同。
处理方法:
1.不相同数字:将乘积结果处理成四位单独的数字,再将其放入集合中,观察长度是否是4。
2.运用count计数方法来统计相同数字的个数。
3.为了提升运行速度,以下提供的程序采取了空间换时间的策略。即分布运行处理并储存结果。
程序:
One = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Two = []
Three = []
Four = []
for i in range(1, len(One)):
for j in One:
if One[i] != j:
Two.append(i * 10 + j)
print(Two)
for j in Two:
for i in range(0, len(One)):
if One[i] != int(j / 10) and One[i] != int(j % 10):
Three.append(j * 10 + One[i])
print(Three)
All_list = {}
#三位数字*一位数字的情况
list = []
for i in Three:
list.clear()
a = int(i / 100)
b = int(i % 100 / 10)
c = int(i % 100 % 10)
list.append(a)
list.append(b)
list.append(c)
# print(list)
j = 1
while j < 10:
list.append(j)
# print(list)
# print(a, type(a), b, type(b), c, type(c), j, type(j))
if a != j != b != c and len(str(i * j)) == 4:
a1 = int((i * One[j]) / 1000)
b1 = int((i * One[j]) % 1000 / 100)
c1 = int((i * One[j]) % 1000 % 100 / 10)
d1 = int((i * One[j]) % 1000 % 100 % 10)
# print(a1,type(a1),b1,type(b1),c1,type(c1),d1,type(d1))
list1 = [a1, b1, c1, d1]
'''
这里的count是用来计算结果中的数字与乘数与被乘数之中相同的数字个数。
如果采用 if a1 in list:
if b1 in list:
if c1 in list:
if d1 in list:
print('45689')
作为判断结果中的数字与乘数与被乘数之中相同的数字个数是否为四的结果的话,也可以。
下面有实例。
'''
count = 0
if a1 in list:
count += 1
if b1 in list:
count += 1
if c1 in list:
count += 1
if d1 in list:
count += 1
if len(set(list1)) == 4 and count == 4:
All_list.setdefault('{}*{}'.format(One[j], i), [])
All_list['{}*{}'.format(One[j], i)].append(i * One[j])
j += 1
list.remove(list[len(list) - 1])
# 两位数字*两位数字的情况
list = []
for i in Two:
list.clear()
a = int(i / 10)
b = int(i % 10)
list.append(a)
list.append(b)
# print(list)
for j in Two:
list.clear()
list = [a,b]
if i != j:
c = int(j / 10)
d = int(j % 10)
if a != b != c != d:
list.append(c)
list.append(d)
# print(list)
if len(str(i * j)) == 4:
a1 = int((i * j) / 1000)
b1 = int((i * j) % 1000 / 100)
c1 = int((i * j) % 1000 % 100 / 10)
d1 = int((i * j) % 1000 % 100 % 10)
list1 = [a1, b1, c1, d1]
# print(list1)
# print(set(list1))
count = 0
if a1 in list:
count += 1
if b1 in list:
count += 1
if c1 in list:
count += 1
if d1 in list:
count += 1
# print(count)
'''
if len(set(list1)) == 4:
if a1 in list:
if b1 in list:
if c1 in list:
if d1 in list:
All_list1.setdefault('{}*{}'.format(j, i), [])
All_list1['{}*{}'.format(j, i)].append(i * j)
'''
if len(set(list1)) == 4 and count == 4:
All_list.setdefault('{}*{}'.format(j, i), [])
All_list['{}*{}'.format(j, i)].append(i * j)
print(All_list)