您现在的位置是:主页 > news > 网站制作费/优化网站建设

网站制作费/优化网站建设

admin2025/5/1 18:26:05news

简介网站制作费,优化网站建设,wordpress添加多媒体,优质高职院校建设网站Topic 由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。 比如: 210 x 6 1260 8 x 473 3784 27 x 81 2187 都符合要求。 如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况…

网站制作费,优化网站建设,wordpress添加多媒体,优质高职院校建设网站Topic 由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。 比如: 210 x 6 1260 8 x 473 3784 27 x 81 2187 都符合要求。 如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况…

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 itertoolscount = 0
a = itertools.permutations([i for i in range(0, 10)], 4)
had = []for i in a:if i[0] == 0:continueb = list(str(i[0]) + str(i[1]) + str(i[2]) + str(i[3]))ans_1 = int(str(i[0]) + str(i[1]) + str(i[2])) * i[3]for j in str(ans_1):if j in b:b.remove(j)if not b:count += 1b = list(str(i[0]) + str(i[1]) + str(i[2]) + str(i[3]))ans_2 = int(str(i[0]) + str(i[1])) * int((str(i[2]) + str(i[3])))for x in str(ans_2):if x in b:b.remove(x)if not b and ans_2 not in had:had.append(ans_2)count += 1print(count)

Solution_2:

第二种其实是一个逆向的思路
所有四个数字的乘积均为一个四位数
只要满足四位数中的四个数字不重复的数字
均可能为我们要求的四位数

所以我们可以对满足条件的四位数字中四个数字进行全排列
排列后思路与Solution_1中相同
判断交换律的思路也与Solution_1中相同

最后输出 coun 的值t即完成

Code_2:

count = 0
had = []for i in range(1000, 10000):a = list(str(i))if a[0] != a[1] != a[2] != a[3]:b = itertools.permutations(a)for j in b:if int(j[0] + j[1] + j[2]) * int(j[3]) == i:count += 1elif int(j[0] + j[1]) * int(j[2] + j[3]) == i and int(j[0] + j[1]) * int(j[2] + j[3]) not in had:had.append(i)count += 1print(count)

Answer

12