生成代码(实现奇数阶幻方。在一个由若干个排列整齐的数组成的正方形中,图中任意一横行、一纵行的几个数之和都相等,具有这种性质的图表,称为“幻方”。输入30以内的任一奇数n,自动输出n*n阶幻方。)
时间: 2024-02-12 17:05:16 浏览: 22
以下是实现奇数阶幻方的 Python 代码:
```python
n = int(input("请输入奇数n(1<=n<=30):"))
magic = [[0] * n for i in range(n)]
i = 0
j = n // 2
num = 1
while num <= n * n:
magic[i][j] = num
num += 1
temp_i, temp_j = i, j
i -= 1
j += 1
if i < 0:
i = n - 1
if j == n:
j = 0
if magic[i][j] != 0:
i, j = temp_i + 1, temp_j
for row in magic:
for value in row:
print(value, end='\t')
print()
```
请注意,此代码是实现奇数阶幻方的一种方法。可能会有其他实现方式。
相关问题
python输入一个奇数n,输出n阶奇数幻方数。
以下是一个简单的 Python 实现,可以输出 n 阶奇数幻方数:
```python
n = int(input("请输入一个奇数:"))
# 创建一个 n*n 的二维数组,并初始化为0
magic_square = [[0 for x in range(n)] for y in range(n)]
# 初始化第一个数的位置,即第一行的中间位置
i = 0
j = n // 2
# 依次填入数字
for num in range(1, n*n+1):
magic_square[i][j] = num
# 计算下一个数的位置
next_i = (i - 1) % n
next_j = (j + 1) % n
# 如果下一个位置已经有数字了,就往下移一行
if magic_square[next_i][next_j]:
i = (i + 1) % n
else:
i, j = next_i, next_j
# 输出幻方
for i in range(n):
for j in range(n):
print(magic_square[i][j], end="\t")
print()
```
这里用到了著名的 Siamese 方法构造幻方,其实现原理是在一个 n*n 的方格中,从第一行的中间位置开始,依次填入数字,每次向右上方移动一个位置,如果该位置已经有数字了,则向下一行移动。最后得到的方阵就是一个 n 阶幻方。
python 输入一个奇数n,输出n阶奇数幻方数
以下是 Python 代码实现:
```python
n = int(input("请输入一个奇数:"))
magic_square = [[0] * n for i in range(n)]
i = n // 2
j = n - 1
num = 1
while num <= n * n:
if i == -1 and j == n:
i = 0
j = n - 2
else:
if i == -1:
i = n - 1
if j == n:
j = 0
if magic_square[i][j]:
i += 1
j -= 2
continue
else:
magic_square[i][j] = num
num += 1
i -= 1
j += 1
for row in magic_square:
print(row)
```
该算法采用了魔方阵构造法的经典算法——Siamese Method,可以快速生成任意奇数阶数的幻方。