这里的parker正方形指的是包含整数的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发布于 2016-04-19 04:09:00
你的代码能工作吗?(这可能是你的第一个任务。)
一些建议..。
1)你认为这可能类似于魔方吗?有一些方法可以构造它们,比如https://plus.maths.org/content/anything-square-magic-squares-sudoku,这可能会有所帮助。
2)由于不能包含同一个数字两次,如果两个数字相同,也许可以退出循环。这是一个比平方和求和更快的操作。
3)你可以考虑强度的降低。如果两行中的数字相加相等,那么它们的平方和是否也相等?
4)而不是对所有999,999,999个组合使用暴力,您可以将向量1,2,3,4,5,6,7,8,9置换吗?这里有一个关于python置换的好问题:How to generate all permutations of a list in Python
https://stackoverflow.com/questions/36703159
复制相似问题