3.标题:神奇算式
由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
请填写该数字,通过浏览器提交答案,不要填写多余内容(例如:列出所有算式)。
————————————————
这题的题目要求:
1:4个不同的数字
2:由题目知,乘法算式主要有两种情况:第一种,1位数乘3位数
第二种,2位数乘2位数
对于情况一:abcd=abcd这样的形式
1位数的a,取值范围为:0-9
3位数的bcd,取值范围为有: b的取值范围:1-9
c的取值范围:0-9
d的取值范围:0-9
这样bcd组合起来的就能匹配 100-999这个范围的所有三位数
对于情况二:abcd这样的形式:
2位数的ab,取值范围有: a的取值范围:1-9
b的取值范围:0-9
同理
2位数的cd,取值范围有: c的取值范围:1-9
d的取值范围:0-9
这样ab或者cd组合起来就能匹配10-99这个范围的所有二位数
且:满足乘法交换律的算式算作同一种情况,那么,
总情况=情况一+(情况二/2) 注:因为2位数*2位数会出现满足乘法交换律的算式,所以要除以2
3:要判断—》由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
可以将转化为字符串再转化为set(),用集合的判等就能判断
万物基于暴力法:
con_13=0
for a in range(2,10): #因为1*三位数是不可能等于一个四位数,所以a=1这种情况不存在
for b in range(1,10):
if b==a:
continue #当出现相同的两个数字的时候跳过此次循环。
for c in range(0,10):
if c==a or c==b:
continue
for d in range(0,10):
if d==a or d==a or d==c:
continue
sr1=str(a)+str(b)+str(c)+str(d) #这里是等号前面的转换为字符串
sr2=str(a*int(str(b)+str(c)+str(d)))#这里是等号后面的转换为
if set(sr1)==set(sr2): #利用set()判断两个是不是同一集合
con_13+=1
con_22=0
for a in range(1,10):
for b in range(0,10):
if b==a:
continue
for c in range(1,10):
if c==a or c==b:
continue
for d in range(0,10):
if d==a or d==a or d==c:
continue
sr1=str(a)+str(b)+str(c)+str(d)
sr2=str(int(str(a)+str(b))*int(str(c)+str(d)))
if set(sr1)==set(sr2):
con_22+=1
print(con_13+con_22//2) #con_13为情况一的,con_22为情况2的