九宫格的填数我用的是比较常规的方法:根据九宫算术填数规律,通过程序方式完成。填数规律:1)最大数填在中间一行、最后一列;2)行+1,列+1,如果新位置没有填数则填下一个数;3)否则,
退回原位置,执行列-1操作,然后填下一个数。
这里我使用python中numpy库的np.zeros((n,n))方法,创建了一个n*n阶的矩阵以便于填数和输出。
#九宫算术
import numpy as np
n = int(input())
a=np.zeros((n,n))
r,c = n//2,n-1 #行,列
for i in range(n*n,0,-1):
a[r][c] = i #先填最大的数
r = (r+1)%n #取模(防止超出范围)
c = (c+1)%n
if a[r][c] != 0: #填数重复
r = (r-1)%n #退回原位
c = (c-2)%n #执行列-1
print(a)
输出:
3
[[6. 7. 2.]
[1. 5. 9.]
[8. 3. 4.]]
5
[[15. 16. 22. 3. 9.]
[ 8. 14. 20. 21. 2.]
[ 1. 7. 13. 19. 25.]
[24. 5. 6. 12. 18.]
[17. 23. 4. 10. 11.]]
......
代码中的巧妙之处就是取模的操作了,我刚开始写九宫格这题时看了许多别人的代码方法,大都需要判断填数是上(下)还是左(右)超出范围,并且需要多次更新位置,使代码看起来很复杂。但在矩阵中取模就可以巧妙的减少这些判断。
本人初学python有不足之处希望能评论留言予以指出,望一起进步!!!