Python真題案例之蛇形數組詳解

問題描述🪐

輸入一個正整數n

在n*n的方陣內填入1,2,3,4…n*n,要求填成蛇形。(回旋的向中間收斂)

樣例輸入:

4

樣例輸出:

不必嚴格按照格式輸出,

問題分析🪐

蛇形填數,目的是為瞭考驗我們對數組索引的熟悉情況,觀察可知需要從右上角開始遍歷 先向下等碰到瞭下限左轉然後向上然後右轉,一直遍歷到最中心。這裡需要對邊界進行判斷 我們對邊界判斷的時候需要有一個緩沖空間也就是說先判斷下一位置再賦值。 (如果先賦值再判斷,想往回走的話很麻煩),還有一點就是定住二維數組的一行或一列 移動另外的索引。由此我們可以寫出以下代碼。

代碼實現🪐

老規矩先上運行結果:

有瞭上面的思路後我們還可以進行逆時針的蛇形數組。

使用定一移一的思想我們還可以對數組進行旋轉。

蛇形數組源碼

import sys


def sn1(n):
    arr=[]
    for i in range(n):
        arr.append([0]*n)

    row=0
    col=n-1
    arr[row][col]=1

    i=1
    while i<n*n:
        while row+1<n and (not arr[row+1][col]):
            arr[row+1][col]=i+1
            row+=1
            i+=1
        while col-1>-1 and (not arr[row][col-1]):
            arr[row][col-1]=i+1
            col-=1
            i+=1
        while row-1>-1 and (not arr[row-1][col]):
            arr[row-1][col]=i+1
            row-=1
            i+=1
        while col+1<n and (not arr[row][col+1]):
            arr[row][col+1]=i+1
            col+=1
            i+=1
        

    for i in range(n):
        flag=True
        for j in range(n):
            if flag:
                print(arr[i][j],end="")
                flag=False
            else:
                print("\t",arr[i][j],end="",sep="")
        print()

def sn2(n):
    arr=[]
    for i in range(n):
        arr.append([0]*n)

    row=0
    col=n-1
    arr[row][col]=i=1
    while i<n*n:
        while(col-1>-1 and not(arr[row][col-1])):
            arr[row][col-1]=i+1
            i+=1
            col-=1
        while(row+1<n and not(arr[row+1][col])):
            arr[row+1][col]=i+1
            i+=1
            row+=1
        while(col+1<n and not(arr[row][col+1])):
            arr[row][col+1]=i+1
            i+=1
            col+=1
        while(row-1>-1 and not(arr[row-1][col])):
            arr[row-1][col]=i+1
            i+=1
            row-=1
    for i in range(n):
        flag=True
        for j in range(n):
            if flag:
                print(arr[i][j],end="")
                flag=False
            else:
                print("\t",arr[i][j],end="",sep="")
        print()

    


if __name__=="__main__":
    n=int(input())
    print("蛇形數組如下(順時針):")
    sn1(n)
    print("蛇形數組如下(逆時針):")
    sn2(n)

旋轉數組源碼

'''
大傢都學習過矩陣,今天呢咱們將n*n類型的字符矩陣進行向左的90°旋轉
'''
#生成全為零的矩陣
arr=[]
n=int(input())
for i in range(n):
    arr.append([0]*n)

#蛇形矩陣

row=0
col=n-1
arr[row][col]=i=1
while i<n*n:
    while row+1<n and not arr[row+1][col]:
        arr[row+1][col]=i+1
        i+=1
        row+=1
    while col-1>=0 and not arr[row][col-1]:
        arr[row][col-1]=i+1
        i+=1
        col-=1
    while row-1>=0 and not arr[row-1][col]:
        arr[row-1][col]=i+1
        i+=1
        row-=1
    while col+1<n and not arr[row][col+1]:
        arr[row][col+1]=i+1
        i+=1
        col+=1
print("旋轉前如下:")
for temp in arr:
    print(temp)

print()

print("旋轉後如下(旋轉90°):")
for i in range(4):
    flag=True
    for j in range(4):
        if flag:
            print(arr[j][3-i],end="")
            flag=False
        else:
            print(" ",arr[j][3-i],end="")
    print()

print("旋轉後如下(旋轉180°):")
for i in range(4):
    flag=True
    for j in range(4):
        if flag:
            print(arr[3-i][3-j],end="")
            flag=False
        else:
            print(" ",arr[3-i][3-j],end="")
    print()

到此這篇關於Python真題案例之蛇形數組詳解的文章就介紹到這瞭,更多相關Python 蛇形數組內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: