题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
现在小学的数学题目也不是那么好玩的。 看看这个寒假作业:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
每个方块代表 1~13 中的某一个数字,但不能重复。
比如:
6 + 7 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5
以及:
7 + 6 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5
就算两种解法。(加法,乘法交换律后算不同的方案)
你一共找到了多少种方案?
参考代码:
def dfs(n):
global ans
if n==13:
if b[10]==b[11]*b[12]: #除法计算慢,转化为乘法
ans+=1
return
if n==4 and b[1]+b[2]!=b[3]: #第一个都不符合,直接结束
return #剪枝操作
if n==7 and b[4]-b[5]!=b[6]:
return
if n==10 and b[7]*b[8]!=b[9]:
return
for i in range(14):
if not t[i]:
b[n]=i
t[i]=1 #标记
dfs(n+1) #搜下一个
t[i]=0 #取消标记
ans=0
b=[0]*15 #记录生成的全排列
t=[0]*15
dfs(1)
print(ans)
#最终答案等于64