思路:构造随机列表来试验,不过由于计算机性能,我不能得到精确的答案。经过试验,一千万个随机可以找到336条,一百万可以找到322条,十万可以找到89条不重复的填法。
2023.9更新,过了一年了我想起来了这个问题,用什么随机数嘛,用列表推导式穷举就行了,只不过结果就是336条,代码放在结尾。
文章目录
前言
这种用大量随机列表去试验的方法难以得到精确值,不过我水平有限,不会另外的方法,就这样吧
代码
num=0
list=[]
end_list=[]
for i in range(1000000): #一千万个随机可以找到336条,一百万可以找到322条,十万可以找到89条
a=random.sample(range(1,10),9)
if (a[0]+a[3])*100+(a[1]+a[4])*10+a[2]+a[5]==a[6]*100+a[7]*10+a[8]:
num+=1
print(num)
list.append(a)
else:
a=[]
#过滤重复的
for j in list:
if j not in end_list:
end_list.append(j)
print(end_list,"\n",len(end_list))
百万级循环的结果示例
总结
一千万次的循环和一百万次循环结果只相差十多次,如果换成一亿次可能会更接近精确值。只是此方法算量就有些庞大了,如果能不用随即创造列表,而是精确的填入数据去试,最多要9**9次循环可得到精确值
更新
a = [(a,b,c,d,e,f,g,h,i) for a in [1,2,3,4,5,6,7,8,9,] for b in [1,2,3,4,5,6,7,8,9,] for c in [1,2,3,4,5,6,7,8,9,] for d in [1,2,3,4,5,6,7,8,9,] for e in [1,2,3,4,5,6,7,8,9,] for f in [1,2,3,4,5,6,7,8,9,] for g in [1,2,3,4,5,6,7,8,9,] for h in [1,2,3,4,5,6,7,8,9,] for i in [1,2,3,4,5,6,7,8,9,] if (a+d)*100+(b+e)*10+c+f==g*100+h*10+i ]
print(a[:10])
print('a的长度'+str(len(a)))
b = []
for i in range(len(a)):
if len(set(a[i])) == 9 :
if a[i] not in b:
b.append(a[i])
print('\n'*3)
print(b[:10])
print('b的长度'+str(len(b))) #336