""" 2 问题描述: 3 给定一个奇数(num),生成一个横竖斜加起来的和相等 4 问题解析: 5 这其实就是一个九宫格的问题 6 九宫格问题的解答技巧: 7 1要放在第一行的正中央,每次按依次向上的格式去填值,如果超出上边框就 把它竖直往下移到最后一行,如果超出右边框就把它横着移动到最左边,在> 移动过程中如果要移动的地方已经存在值,就把这个放到前一个数字的下面> ,如果上边框和右边框都超过啦,就和排重一样,也把这个放到前一个数字> 的下面。 8 问题解决步骤: 9 根据我们发现的规律来进行代码化 10 1.创建一个缺省值为0的num*num的二维列表 11 2.根据根据规律来书写代码 12 """ 13 #创建num*num的二维列表 14 num = int(input()) 15 a = [[0 for i in range(num)]for i in range(num)] 16 #将第一行中间那列的值定为1 17 a[0][num//2] = 1 18 x = 0 19 y = num//2 20 #将2以后的值依次填入列表中 21 for i in range(1,num*num): 22 j = i + 1 23 x = x - 1 24 y = y + 1 25 if x < 0 and y <= num - 1: 26 x = x + 3 27 a[x][y] = j 28 elif x < 0 and y > num - 1: 29 x = x + 2 30 y = y - 1 31 a[x][y] = j 32 elif y > num - 1: 33 y = 0 34 a[x][y] = j else: 36 if a[x][y] == 0: 37 a[x][y] = j 38 else: 39 x = x + 2 40 y = y - 1 41 a[x][y] = j 42 43 for n in range(num): 44 for m in range(num): 45 print(str(a[m][n]).rjust(2,"0"),end = " ") 46 print()
运行结果
08 03 04
01 05 09
06 07 02
当输入5时
15 09 24 00 00
10 25 16 17 18
01 06 11 19 20
07 12 02 21 22
13 14 08 23 00
如果出现看代码无法理解逻辑时,则就是没有充分的了解这种数独的解题技巧,可以百度其解题技巧后再返回来看代码逻辑则可!