找到 3x3 矩阵 M,其行、列和对角线加起来为 15。条件:必须使用 1-9 中的每个数字。
我不是很聪明,所以我只是尝试了这种暴力方法:
def solve_999():
for a in range(1, 10):
for b in range(1, 10):
for c in range(1, 10):
for d in range(1, 10):
for e in range(1, 10):
for f in range(1, 10):
for g in range(1, 10):
for h in range(1, 10):
for i in range(1, 10):
if (a+b+c == d+e+f == g+h+i == a+d+g == b+e+h == c+f+i == a+e+i == c+e+g == 15):
if check_unique([a, b, c, d, e, f, g, h, i]):
print(a, b, c)
print(d, e, f)
print(g, h, i)
return
def check_unique(L):
d = {1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0}
for letter in L:
d[letter] += 1
if d[letter] > 1:
return False
return True
它有效,但效率不高。谁能帮我找到更有效的解决方案?
最佳答案
很简单。想一想有多少种方法可以从三个数字的总和中得出 15。
1+5+9, 1+6+8, 2+4+9, 2+5+8, 2+6+7, 3+4+8, 3+5+7, 4+5+6
因为只有 8 种方式,所以每个总和都会出现在您的方 block 中。 5 必须在中间,因为它出现了 4 次。 2,4,6,8 一定在角落里,因为它们出现了 3 次。
继续思考,您会找到解决方案。
关于python - 解决这个矩阵难题的更有效的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39003147/