这里的parker square指的是包含整数的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
答案 0 :(得分:0)
您的代码是否有效? (这可能是您的第一笔业务。)
一些建议......
1)你认为这可能与魔术广场相似吗?有一些方法可以构建那些可能有帮助的方法,例如https://plus.maths.org/content/anything-square-magic-squares-sudoku。
2)由于你不能两次包含相同的数字,如果两个数字相同,也许你可以退出循环。这比平方和求和更快。
3)你可以考虑减少力量。如果两行中的数字加起来相同,它们的平方和是否也加起来相同?
4)你是否可以置换矢量[1,2,3,4,5,6,7,8,9],而不是通过所有999,999,999组合强力进行蛮力?这是关于python排列的一个很好的问题:How to generate all permutations of a list in Python
答案 1 :(得分:0)
根据rajah9的回答,确认您的代码是否确实有效应该是第一要务。从外观上看,您的代码将无法工作,因为它永远不会检查关键条件:
“网格中的所有单元格不能包含相同的数字。”
,要纠正这一点,请改行
if j==k and k==l and l==m and m==n and n==o and o==p and p==q:
应扩展到
if j==k and k==l and l==m and m==n and n==o and o==p and p==q: and a!=b and a!=c and a!=d
# and so on until all the 9 cells have been catered for