Skip to main content
 首页 » 编程设计

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

2025年05月04日26jirigala

找到 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 次。

继续思考,您会找到解决方案。