寒假作业
现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
(如果显示不出来,可以参见【图1.jpg】)
每个方块代表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 ad(a, b, k):
if len(b) >= 3 and b[0] + b[1] != b[2]:
return k
elif len(b) >= 6 and b[3] - b[4] != b[5]:
return k
elif len(b) >= 9 and b[6] * b[7] != b[8]:
return k
elif len(b) == 12 and b[9] != b[10] * b[11]:
return k
elif len(b) == 12:
k += 1
for i in range(len(a)):
b.append(a[i])
d = a.pop(i)
k = ad(a, b, k)
a.insert(i, d)
b.pop(-1)
return k
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
b = [1]
k = ad(a, b, 0)
print(k)
48