1. 程式人生 > >橙白時光OJ 1032 蛇形填數

橙白時光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('')