藍橋杯 基礎練習 回形取數 Python

2021-10-03 06:37:38 字數 3304 閱讀 6945

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

思路

這道題和 「pat乙級 螺旋矩陣」很類似

我們把矩陣分為如下的色塊

找出規律:

設行為m,列為n,圈數為l

矩陣有多少圈?

l = min(m, n)//2

所以每一圈的起點也知道了,即為(l - 1, l - 1), 我們令i = l - 1

各個色塊的規律

red: (i,i)——(m - 1 - i, i)

orange:(m - 1 - i, i +1)——(m - 1 - i, n - 1 - i)

yellow:(m - 2 - i,n - 1 - i)——(i, n - 1 - i)

green:(i, n - 2 - i)——(i, i + 1) (倒序)

數到矩陣中間的特殊情況:

m > n and n 為奇數,最後要縱向輸出

m < n and m 為奇數, 最後要橫向輸出

**

tmp =

input()

.split(

)m =

eval

(tmp[0]

)n =

eval

(tmp[1]

)square =

for i in

range

(m):

t =list

(map

(int

,input()

.split())

)minn =

min(m, n)

l =(

min(m, n)+1

)//2flag =

0# 格式控制符 第乙個數前面不加空格

for i in

range

(l):

if i == l -

1and

(minn +1)

%2==0

:# 橫向

if m < n:

for j in

range

(i, n - i)

:if flag ==0:

print

('{}'

.format

(square[i]

[j])

, end='')

flag =

1else

:print

(' {}'

.format

(square[i]

[j])

, end='')

# 縱向

else

:for j in

range

(i, m - i)

:if flag ==0:

print

('{}'

.format

(square[j]

[i])

, end='')

flag =

1else

:print

(' {}'

.format

(square[j]

[i])

, end='')

else

:# down

for j in

range

(i, m - i)

:if flag ==0:

print

(square[j]

[i], end='')

flag =

1else

:print

(" {}"

.format

(square[j]

[i])

, end='')

# right

for j in

range

(i +

1, n - i)

:print

(' {}'

.format

(square[m -

1- i]

[j])

, end='')

# up

for j in

range

(m -

2- i, i -1,

-1):

print

(' {}'

.format

(square[j]

[n -

1- i]

), end='')

# left

for j in

range

(n -

2- i, i,-1

):print

(' {}'

.format

(square[i]

[j])

, end=

'')

藍橋杯 基礎練習 回形取數

問題描述 回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。輸入格式 輸入第一行是兩個不超過200的正整數m,n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。輸出格式 輸出只有一行,共mn個數,為輸入矩陣回形取數得到的結果。數之間用...

藍橋杯 基礎練習 回形取數

時間限制 1sec 記憶體限制 128mb 題目描述 回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。輸入 輸入第一行是兩個不超過200的正整數m,n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。輸出 輸出只有一行,共mn個數,為...

藍橋杯 基礎練習 回形取數

問題描述 回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。輸入格式 輸入第一行是兩個不超過200的正整數m,n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。輸出格式 輸出只有一行,共mn個數,為輸入矩陣回形取數得到的結果。數之間用...