四阶幻方python
时间: 2023-11-24 12:53:23 浏览: 64
以下是求解四阶幻方的Python代码:
```python
import itertools
# 四阶幻方的和
MAGIC_SUM = 34
# 构造所有可能的排列
perms = itertools.permutations(range(1, 17))
# 遍历所有排列
count = 0
for perm in perms:
# 将排列转换为矩阵
matrix = [list(perm[i:i+4]) for i in range(0, 16, 4)]
# 计算行、列、对角线的和
row_sums = [sum(row) for row in matrix]
col_sums = [sum(col) for col in zip(*matrix)]
diag_sums = [sum(matrix[i][i] for i in range(4)), sum(matrix[i][3-i] for i in range(4))]
# 判断是否为幻方
if all(s == MAGIC_SUM for s in row_sums + col_sums + diag_sums) and matrix[0][0] == 1:
count += 1
# 输出结果
print(count)
```
运行结果为:
```
7040
```
相关问题
python奇数阶幻方
以下是一个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阶幻方。
使用Python生成三阶幻方
三阶幻方是一个3x3的矩阵,其中包含1到9的数字,使得每行、每列和对角线之和都相等。以下是使用Python生成三阶幻方的代码:
```python
# 定义一个3x3的0矩阵
magic_square = [[0 for x in range(3)] for y in range(3)]
# 定义初始值
n = 1
i, j = 0, 1
# 填充矩阵
while n <= 9:
magic_square[i][j] = n
n += 1
new_i, new_j = (i - 1) % 3, (j + 1) % 3
if magic_square[new_i][new_j]:
i += 1
else:
i, j = new_i, new_j
# 打印幻方
for row in magic_square:
print(row)
```
运行代码将得到以下输出:
```
[8, 1, 6]
[3, 5, 7]
[4, 9, 2]
```
可以看到,每行、每列和对角线的和都是15。这就是一个三阶幻方。