横竖斜总和相等的奇数矩阵

问题描述:给定一个奇数n,将1~n * n填入n * n的矩阵中,数字不能重复,使得横竖斜的总和相等。

如当n=7时:
30 39 48 01 10 19 28
38 47 07 09 18 27 29
46 06 08 17 26 35 37
05 14 16 25 34 36 45
13 15 24 33 42 44 04
21 23 32 41 43 03 12
22 31 40 49 02 11 20

规律:从小到大依次放入矩阵中,下一个数放在上一个数的右上角位置(即:行-1,列+1)。1总是在第一行的中间位置,接着将2放在1的右上角,依次类推。 a.如果右上角的位置的行和列都越界,就将这个数放在上个数的正下方(即:上个数的行+1)。b.如果右上角的位置只有行越界,就将行改到最大,列不变。c.如果右上角的位置只有列越界,就将列改到最小,行不变。d.如果右上角的位置没有越界,但是已经填有数字,就将这个数放在上个数的正下方。

  • python代码
n = int(input("请输入一个奇数:"))
m = [[0 for i in range(n)] for i in range(n)] #矩阵
row, col = 0, n // 2
num = 1
while num <= n * n:
    m[row][col] = num
    num += 1
    row -= 1
    col += 1
    if row < 0 and col >= n:
        row, col = row + 2, col - 1#因为row已经减了1,col已经加了1
    elif row < 0:
        row = n - 1
    elif col >= n:
        col = 0
    elif m[row][col] != 0:
        row, col = row + 2, col - 1
for i in range(n):
    for j in range(n):
        print('%02d' % m[i][j], end = ' ')
    print()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容