【問題】用 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...