Python真題案例之蛇形數(shù)組詳解
問題描述??
輸入一個(gè)正整數(shù)n
在n*n的方陣內(nèi)填入1,2,3,4…n*n,要求填成蛇形。(回旋的向中間收斂)
樣例輸入:
4
樣例輸出:
不必嚴(yán)格按照格式輸出,
問題分析??
蛇形填數(shù),目的是為了考驗(yàn)我們對數(shù)組索引的熟悉情況,觀察可知需要從右上角開始遍歷 先向下等碰到了下限左轉(zhuǎn)然后向上然后右轉(zhuǎn),一直遍歷到最中心。這里需要對邊界進(jìn)行判斷 我們對邊界判斷的時(shí)候需要有一個(gè)緩沖空間也就是說先判斷下一位置再賦值。 (如果先賦值再判斷,想往回走的話很麻煩),還有一點(diǎn)就是定住二維數(shù)組的一行或一列 移動(dòng)另外的索引。由此我們可以寫出以下代碼。
代碼實(shí)現(xiàn)??
老規(guī)矩先上運(yùn)行結(jié)果:
有了上面的思路后我們還可以進(jìn)行逆時(shí)針的蛇形數(shù)組。
使用定一移一的思想我們還可以對數(shù)組進(jìn)行旋轉(zhuǎn)。
蛇形數(shù)組源碼
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("蛇形數(shù)組如下(順時(shí)針):") sn1(n) print("蛇形數(shù)組如下(逆時(shí)針):") sn2(n)
旋轉(zhuǎn)數(shù)組源碼
''' 大家都學(xué)習(xí)過矩陣,今天呢咱們將n*n類型的字符矩陣進(jìn)行向左的90°旋轉(zhuǎn) ''' #生成全為零的矩陣 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("旋轉(zhuǎn)前如下:") for temp in arr: print(temp) print() print("旋轉(zhuǎn)后如下(旋轉(zhuǎn)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("旋轉(zhuǎn)后如下(旋轉(zhuǎn)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()
到此這篇關(guān)于Python真題案例之蛇形數(shù)組詳解的文章就介紹到這了,更多相關(guān)Python 蛇形數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python在windows調(diào)用svn-pysvn的實(shí)現(xiàn)
本文主要介紹了python在windows調(diào)用svn-pysvn的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02pycharm的debug調(diào)試以及異常,Python中錯(cuò)誤的處理過程
這篇文章主要介紹了pycharm的debug調(diào)試以及異常,Python中錯(cuò)誤的處理過程,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01PyTorch和Keras計(jì)算模型參數(shù)的例子
今天小編就為大家分享一篇PyTorch和Keras計(jì)算模型參數(shù)的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01Python開發(fā)寶典CSV JSON數(shù)據(jù)處理技巧詳解
在Python中處理CSV和JSON數(shù)據(jù)時(shí),需要深入了解這兩種數(shù)據(jù)格式的讀取、寫入、處理和轉(zhuǎn)換方法,下面將詳細(xì)介紹如何在Python中處理CSV和JSON數(shù)據(jù),并提供一些示例和最佳實(shí)踐2023-11-11使用numpy對數(shù)組求平均時(shí)如何忽略nan值
這篇文章主要介紹了使用numpy對數(shù)組求平均時(shí)如何忽略nan值,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02