python奇数阶幻方
时间: 2023-10-14 20:26:27 浏览: 81
以下是一个Python实现奇数阶幻方的代码:
```python
def odd_magic_square(n):
"""
生成n阶奇数幻方
"""
magic_square = [[0] * n for _ in range(n)]
i, j = n // 2, n - 1
num = 1
while num <= n**2:
if i == -1 and j == n: # 情况1:行列都超出了范围
i, j = 0, n - 2
else:
if i == -1: # 情况2:行超出了范围
i = n - 1
if j == n: # 情况3:列超出了范围
j = 0
if magic_square[i][j] != 0: # 情况4:当前位置已经有数了
i, j = i + 1, j - 2
continue
magic_square[i][j] = num
num += 1
i, j = i - 1, j + 1
return magic_square
# 测试
n = 5
ms = odd_magic_square(n)
for i in range(n):
for j in range(n):
print(ms[i][j], end="\t")
print()
```
输出结果:
```
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
```
该算法的基本思路是从幻方的第一行中间开始,按照以下规则填充数字:
1. 将数字1填入第一行中间的位置。
2. 依次填充2、3、4...n^2,每次填充数字时,先将当前位置设为要填充的数字,再按照以下规则更新当前位置:如果当前位置的右上方已经有数字了,则将当前位置下移到下一行、列移到当前列的左侧,否则直接将当前位置移到右上方。
3. 当填充完n^2个数字后,就得到了一个n阶幻方。