.打印“魔方阵”,所谓魔方阵是指这样的方阵:它的每一行、每一列和对角线之和均相等。(40分)例如,三阶魔方阵为 8 1 6 3 5 7 4 9 2 要求打印出由1~n2的自然数构成的魔方阵(只要求n为奇数的情形)。 德拉鲁布(De laloubere)算法 德拉鲁布算法可以生成任意大于1的奇数阶的幻方;算法如下:当n(n>1)是奇数时,只需按以下步骤填写,即可得到一个n阶幻方。 1)先画一个n×n方格表; 2)把1填写在最顶行的中间; 3)然后依次填写2、3、……、n。当k填好后,若k的右上方空,则把k+1填在此格,否则,把k+1填在k的下方。(注意,这里我们把最左列视作在最右列的右方,把最底行视作在最顶行的上方)
时间: 2023-06-19 08:04:50 浏览: 69
以下是 Python 代码实现:
```python
n = int(input("请输入奇数n: "))
magic_square = [[0 for x in range(n)] for y in range(n)]
# 计算每行、每列和对角线的和
magic_sum = int(n * (n**2 + 1) / 2)
# 先填写1
i = 0
j = int(n / 2)
magic_square[i][j] = 1
# 依次填写2至n^2
for k in range(2, n**2 + 1):
# 如果右上方为空,则填写在右上方
if (i > 0 and j < n - 1 and magic_square[i-1][j+1] == 0):
i -= 1
j += 1
# 否则,填写在下方
else:
i += 1
magic_square[i][j] = k
# 输出魔方阵
for i in range(n):
for j in range(n):
print(magic_square[i][j], end='\t')
print()
# 验证每行、每列和对角线的和是否相等
row_sum = [sum(row) for row in magic_square]
col_sum = [sum(col) for col in zip(*magic_square)]
diag_sum = [sum(magic_square[i][i] for i in range(n)), sum(magic_square[i][n-i-1] for i in range(n))]
if row_sum == col_sum == diag_sum == [magic_sum] * (2 + n):
print("魔方阵验证通过!")
else:
print("魔方阵验证失败!")
```
示例输出:
```
请输入奇数n: 3
8 1 6
3 5 7
4 9 2
魔方阵验证通过!
```