刷題日記 Python藍橋杯 回形取數

2021-10-05 11:35:35 字數 2213 閱讀 5634

資源限制

時間限制: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...