資源限制
時間限制:1.0s 記憶體限制:512.0mb
問題描述
回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。
輸入格式
輸入第一行是兩個不超過200的正整數m, n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。
輸出格式
輸出只有一行,共mn個數,為輸入矩陣回形取數得到的結果。數之間用乙個空格分隔,行末不要有多餘的空格。
樣例輸入
3 31 2 3
4 5 6
7 8 9
樣例輸出
1 4 7 8 9 6 3 2 5
樣例輸入
3 21 2
3 45 6
樣例輸出
1 3 5 6 4 2
1、解題思路:
分別向下向右向上向左迴圈,同時將已經讀取的數修改為-5。
首先建立了兩個列表,乙個是用來存寫入的數字(巢狀列表),另乙個用來存讀出的數字。
然後使用while迴圈,回形讀取列表元素。
2、**
這個答案執行結果超時,在跑33的矩陣時,執行就超時了,32倒是還可以,所以只得了30分,目前還沒想到要怎麼優化。
n,m=
map(
int,
input()
.split())
ls1=
ls2=
for i in
range
(n):
#輸入 i=
list
(map
(int
,input()
.split())
)x=0y=
0while
(len
(ls2)
!=n*m)
:while
(x[y]!=-5
):#向下[y]
) ls1[x]
[y]=-5
x=x+
1 x-=
1 y+=
1while
(y[y]!=-5
):#向右[y]
) ls1[x]
[y]=-5
y+=1 y-=
1 x-=
1while
(x>-1
and ls1[x]
[y]!=-5
):#向上[y]
) ls1[x]
[y]=-5
x-=1 y-=
1 x+=
1while
(y<-1
and ls1[x]
[y]!=-5
):#向左[y]
) ls1[x]
[y]=-5
y-=1 y+=
1 x+=
1print
(' '
.join(
str(i)
for i in ls2)
)
方法二:
根據取數的規律來寫,從0開始,偶數列從上往下取,奇數列從下往上取。
m,n=
map(
int,
input()
.split())
ls=[
for j in
range
(m)]
#建立空的二維陣列
for i in
range
(m):
arr=
input()
.split(
)for j in
range
(n):
ls[i]
int(arr[j]))
#將資料放到二維陣列中j=0
while jfor i in
range
(m):
ls1=
if j%2==
0:print
(ls[i]
[j],end=
' ')
#如果為偶數列,則從上往下讀取
elif j%2==
1:print
(ls[m-i-1]
[j],end=
' ')
#若為奇數,則從下往上讀取
j+=1
刷題日記 Python藍橋杯 回文數
知識點補充 字串反轉語句 使用字串切片 string s 1 i abcdef print i 1 輸出結果為 fedcba i abcdef print i 2 1 輸出結果為 edcba 下面為對回文數題目的解答 問題描述 1221是乙個非常特殊的數,它從左邊讀和從右邊讀是一樣的,程式設計求所有...
刷題日記 Python藍橋杯 數列排序
問題描述 給定乙個長度為n的數列,將這個數列按從小到大的順序排列。1 n 200 輸入格式 第一行為乙個整數n。第二行包含n個整數,為待排序的數,每個整數的絕對值小於10000。輸出格式 輸出一行,按從小到大的順序輸出排序後的數列。樣例輸入 58 3 6 4 9 樣例輸出 3 4 6 8 9 n i...
刷題日記 Python藍橋杯 特殊的數字
資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 153是乙個非常特殊的數,它等於它的每位數字的立方和,即153 111 555 333。程式設計求所有滿足這種條件的三位十進位制數。輸出格式 按從小到大的順序輸出滿足條件的三位十進位制數,每個數占一行。解答 方法1 for i in...