python - 解决这个矩阵难题的更有效的解决方案?

标签 python matrix puzzle

找到 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/

相关文章:

python - 尝试使用变量更改 discord.Colour 时错误请求 400

python - 在 Pandas 数据框中拆分列

android - Loop the Loop(Fences) 益智游戏开发 on android

c - 链表垃圾值c

python - Postgres `INSERT INTO` 替换条目而不是添加新条目

python - 如何使用Scrapy抓取有分页的网站?

matlab - 如何在 matlab 中从 3d 矩阵制作视频

r - 如何使用R将每小时乘客OD数据传输到od矩阵

Java:将主对角线上方和下方形成的三角形的所有元素相加

c - 在c二进制文件中,测试数字是否在范围内