Topic
由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
请填写该数字,通过浏览器提交答案,不要填写多余内容(例如:列出所有算式)。
Solution_1
利用全排列先将四位数字进行全排列
并将首位是0的情况进行排除
在正式判断前需提前考虑交换律
如果是三位数乘一位数
则只需在三位数乘一位数时在结果中加一
交换后变为一位数乘三位数则无需添加和判断
同时也避免了交换律的重复
之后就是正式的判断
对于三位数乘一位数
首先需要将排列的数字输出为三位数乘一位数字后的ans_1
为了判断“乘积仍然由这4个数字组成”需将四个数字设置成列表b
只要四个数字中在b中存在就在b中删除
当b完全为空则证明“乘积仍然由这4个数字组成”的要求
结果count + 1
对于两位数乘两位数
判断过程与三位数乘一位数相同
但是为了满足交换后仅计算一次的情况
需提前设置had列表
将满足条件的结果每次加入到had中
若ans_2不在had中则满足交换律仅计算一次的条件
最后输出count 的值即位结果
Code_1
import itertools
count = 0
a = itertools.permutations([i for i in range(0, 10)], 4)
had = []
for i in a:
if i[0] == 0:
continue
b = list(str(i[0]) + str(i[1