给我这个谜语:
我的第一个想法是使用python解决它。 (后来我意识到代数会容易得多。)
这是我的初始代码:
a = 0
b = 0
c = 0
d = 0
for a in range(100):
for b in range(100):
for c in range(100):
for d in range(100):
if float(a + b)/4 == 8.0:
if float(a + c)/4 == 13.0:
if float(c - d)/4 == 6.0:
if float(b + d)/4 == 8.0:
print(float(a + b)/4, end=" ")
print(float(a + c)/4, end=" ")
print(float(c + -d)/4, end=" ")
print(float(b + d)/4, end=" and values are:")
print(a/4, end=" ")
print(b/4, end=" ")
print(c/4, end=" ")
print(d/4)
它起作用了,但是显然这不是很可读。 查看堆栈溢出会导致解决方案成为递归函数,但是我不知道如何精确地应用它,因为存在四种不同的数学计算。
例如,这是我最初尝试的内容:
val = [0, 0, 0, 0]
def recursive_solution(section):
for val[section] in range(100):
for val[section+1] in range(100):
if section == 0:
if float(val[section])/4 + float(val[section + 1])/4 == 8:
recursive_solution(1)
recursive_solution(0)
但是这显然不起作用,因为第二个索引被添加到了第四索引,并且其中一个操作是减法,并且您不能将第四个索引添加到第五个索引,因为第五个索引没有存在。
答案 0 :(得分:0)
这就是我要从您的代码中执行的操作:使用笛卡尔product和and
语句:
from collections import product
for a, b, c, d in product(*([range(100)] * 4))
if (
float(a + b) / 4 == 8.0
and float(a + c) / 4 == 13.0
and float(c - d) / 4 == 6.0
and float(b + d) / 4 == 8.0
):
print(float(a + b) / 4, end=" ")
print(float(a + c) / 4, end=" ")
print(float(c + -d) / 4, end=" ")
print(float(b + d) / 4, end=" and values are:")
print(a / 4, end=" ")
print(b / 4, end=" ")
print(c / 4, end=" ")
print(d / 4)