python3 題解(14)蛇形填充矩陣

2021-09-27 04:28:27 字數 1582 閱讀 9457

【問題】用 1 … n

2n^2

n2的數字蛇形填充 n 階矩陣。當 n = 5 的時候,如下:

1   2   3   4   5 

10 9 8 7 6

11 12 13 14 15

20 19 18 17 16

21 22 23 24 25

最直觀的方式是模擬實際填充過程。遇到出界情況換下一行,填充方向改變。

這樣做,需要儲存當前的 行,列 位置,當前要填入的資料,以及當前的填充方向。

def

fang

(n):

x =[[

0for j in

range

(n)]

for i in

range

(n)]

dj =

1 i =

0 j =

0 w =

1while w <= n*n:

x[i]

[j]= w

w +=

1 j += dj

if j == n:

i +=

1 j = n -

1 dj =-1

if j <0:

i +=

1 j =

0 dj =

1return x

defdisp

(x):

for row in x:

for i in row:

print(""

.format

(i), end =

' ')

print()

if __name__ ==

'__main__'

: disp(fang(5)

)

這裡的方向儲存的是列號的變化量。

如果是斜線方向填充,那有可能要同時儲存 di, dj

這種解法雖然有點囉嗦,它可以適用於很多花樣繁多的填充要求。

單單就本題目而言,也可以簡潔一點:

先正常填充,有些行再反轉一下就行。

def

fang

(n):

for i in

range

(n):

begin = i * n +

1 row =

list

(range

(begin, begin + n)

)yield

(row if i %2==

0else

reversed

(row)

)def

disp

(x):

for row in x:

for i in row:

print(""

.format

(i), end =

' ')

print()

if __name__ ==

'__main__'

: disp(fang(5)

)

python3 題解(34 棋盤放麥子)

問題 西洋棋的棋盤有共有64格。傳說國王為獎勵它的發明人,答應了他的乙個 小 要求。在棋盤的第1格放1粒小麥,第2格放2粒,第3格放4粒,第4格放8粒 每一格是前一格數目的2倍。這一共是多少小麥呢?是個天文數字!請你利用計算機計算,準確地說,到底是多少小麥。分析 實際上就是求 1 2 4 8 一共湊...

python3 切片 python3 切片

取乙個list或tuple的部分元素是非常常見的操作。比如,乙個list如下 l michael sarah tracy bob jack 取前3個元素,應該怎麼做?笨辦法 l 0 l 1 l 2 michael sarah tracy 之所以是笨辦法是因為擴充套件一下,取前n個元素就沒轍了。取前n...

python3安裝 Python3的安裝

1.anaconda安裝 2.安裝包安裝 3.linux下的命令列安裝 centos red hat 1 sudo yum install y sudo yum update3 sudo yum install y python35u python35u libs python35u devel p...