橙白时光OJ 1032 蛇形填数

橙白时光OJ 1032 蛇形填数

描述
在nn方陈里填入1,2,…,nn,要求填成蛇形。例如n=4时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入
直接输入方阵的维数,即n的值。(n<=100)
输出
输出结果是蛇形方阵。

解题思路:
先列出一个矩阵,并用0将其填充完整
对于矩阵中的每个元素,与之相邻的不外乎上,下,左,右四个方向。对于n=3的矩阵,起始值位置坐标为(0,2),它应向下进行移动,所以首坐标+1。以此类推,左移动时,末坐标-1;上移动时,首坐标-1;右移动时,末坐标+1。
而后通过while循环语句限制位置的移动即可(保证不会超出矩阵边界且下一个移动位置处没有被填充)。
收获:
矩阵生成并且用0填充完整、用while语句进行限制填充数字。
代码为

def j(n):
    l=[[0 for i in range(n)] for j in range(n)]
    return l
n=int(input())
l=j(n)
i,j=0,n-1
a=l[i][j]=1
while a<n*n:
    #down
    while i+1<n and l[i+1][j]==0:
        a += 1
        i += 1
        l[i][j]=a
    #left
    while -1<j-1 and l[i][j-1]==0:
        a += 1
        j -= 1
        l[i][j]=a
    #up
    while -1<i-1 and l[i-1][j]==0:
        a += 1
        i -= 1
        l[i][j]=a
    #right
    while j+1<n and l[i][j+1]==0:
        a += 1
        j += 1
        l[i][j]=a
for i1 in l:
    for j1 in i1:
        print(j1,end=' ')
    print('')

猜你喜欢

转载自blog.csdn.net/weixin_43763903/article/details/84348988