【发布时间】:2016-04-18 19:54:55
【问题描述】:
这里的帕克正方形是指包含整数的 9x9 网格。将所有整数平方后,每行、每列和每条对角线的总和是相同的。 (网格中的所有单元格不能包含相同的数字)。
https://www.youtube.com/watch?v=aOT_bG-vWyg 关于该主题的 5 分钟视频
我正在尝试解决这个问题,但我需要一些帮助来优化我当前的解决方案,这非常业余。
首先,我将 9x9 网格中的所有单元格命名为变量 a-i 然后,我分别计算每列、行和对角线的平方和,并检查它们是否都相等一次。
我的代码在下面的 Python 中,有什么建议吗?
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):
j=a**2+b**2+c**2
k=d**2+e**2+f**2
l=g**2+h**2+i**2
m=a**2+d**2+g**2
n=b**2+e**2+h**2
o=c**2+f**2+i**2
p=a**2+e**2+i**2
q=c**2+e**2+g**2
if j==k and k==l and l==m and m==n and n==o and o==p and p==q:
print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
print(g)
print(h)
print(i)
break
【问题讨论】:
-
它被称为魔方。帕克广场只是视频中的特定广场。
-
您可以使用cartesian product 代替那些嵌套循环,例如
product(range(1, 10), repeat=9) -
这是我写的Java magic square tester 答案。初始列表需要更改为所有数字的平方。
-
@PeterWood 不能有重复的数字,所以应该是一个排列。
标签: python