效果:
效果图.png
分析:
1、将01放在第一行的正中央;
2、然后依次向右上的格式去填值:
(1)如果超出上边框就把它竖直往下移到最后一行;
(2)如果超出右边框就把它横着移动到最左边;
(3)如果要移动的地方已经存在值,就把这个放到前一个数字的下面;
(4)如果上边框和右边框都超过啦,就把这个放到前一个数字的下面。
实现代码:
n = int(input("请输入一个奇数:"))
m = [[0 for i in range(n)] for i in range(n)] #创建一个nxn的居中
row, col = 0, n // 2 #初始行列设置01的位置
num = 1 #数字从01开始
while num <= n * n:
m[row][col] = num #先将01放到第一行中间位置
num += 1 #每一次循环数字加一
row -= 1 #下一位数字的行下标
col += 1 #下一位数字的列下标
if row < 0 and col >= n: #判断超出上方行,右方列
row, col = row + 2, col - 1
elif row < 0: #判断只有行超出上方行
row = n - 1
elif col >= n:#判断只有行超出右方列
col = 0
elif m[row][col] != 0: #判断下一位不为初始值0
row, col = row + 2, col - 1
#按照列表中存储的数字打印出来
for i in range(n):
for j in range(n):
print('%02d' % m[i][j], end = ' ')
print()