藍橋杯 演算法訓練 輸出公尺字形Python實現

2021-10-03 07:17:07 字數 1864 閱讀 7315

資源限制

時間限制:1.0s 記憶體限制:512.0mb

根據輸入的正整數n (1  公尺字形由乙個(2n-1)*(2n-1)的矩陣組成,矩陣包含從大寫a開始的n個字母

例如:n=3時,包含a,b,c;n=4時,包含a,b,c,d。

矩陣的正中間為n個字母中字典序最大的那個,從這個字母開始,沿著西北、正北、東北、正西、正東、西南、正南、東南八個方向各有一條由大寫字母組成的直線。並且直線上的字母按字典序依次減小,直到大寫字母a。

矩陣的其它位置用英文句號.填充。

樣例輸入一

3樣例輸出一

a.a.a

.bbb.

abcba

.bbb.

a.a.a

樣例輸入二

4樣例輸出二

a..a..a

.b.b.b.

..ccc..

abcdcba

..ccc..

.b.b.b.

a..a..a

分析:

我們把輸出的圖形分成3塊考慮。

第一塊是上面的n-1行,第二塊是中間的一行回文串,第三行是下面的n-1行,第一塊和第三塊是一樣的,乙個是正序,乙個是逆序。

我們首先建個全是點號的二維列表,然後依次發現每一行輸出字母與行號的關係即可。

while

true

:try

: n =

int(

input()

) s1 =[[

'.'for i in

range(2

*n-1)]

for j in

range

(n-1)]

for i in

range

(n-1):

for j in

range

(i,2

*n-1

-i,n-

1-i)

: s1[i]

[j]=

chr(

ord(

'a')

+i)#上半部分整好了

s2 =

['.'

for i in

range(2

*n-1)]

for i in

range

(n):

s2[i]

=chr

(ord

('a'

)+i)

s2[2*n-i-2]

=chr

(ord

('a'

)+i)

#中間一行整好

for i in

range

(n-1):

for j in

range(2

*n-1):

print

(s1[i]

[j],end='')

print(''

)for num in s2:

print

(num,end='')

print(''

)for i in

range

(n-2,-

1,-1

):for j in

range(2

*n-1):

print

(s1[i]

[j],end='')

print(''

)except

:break

程式設計小白記錄成長

試題 演算法訓練 輸出公尺字形 藍橋杯

題目描述 資源限制 時間限制 1.0s 記憶體限制 512.0mb 根據輸入的正整數n 1 公尺字形由乙個 2n 1 2n 1 的矩陣組成,矩陣包含從大寫a開始的n個字母 例如 n 3時,包含a,b,c n 4時,包含a,b,c,d。矩陣的正中間為n個字母中字典序最大的那個,從這個字母開始,沿著西北...

演算法訓練 輸出公尺字形

根據輸入的正整數n 1 公尺字形由乙個 2n 1 2n 1 的矩陣組成,矩陣包含從大寫a開始的n個字母 例如 n 3時,包含a,b,c n 4時,包含a,b,c,d。矩陣的正中間為n個字母中字典序最大的那個,從這個字母開始,沿著西北 正北 東北 正西 正東 西南 正南 東南八個方向各有一條由大寫字母...

演算法訓練 輸出公尺字形

根據輸入的正整數n 1 公尺字形由乙個 2n 1 2n 1 的矩陣組成,矩陣包含從大寫a開始的n個字母 例如 n 3時,包含a,b,c n 4時,包含a,b,c,d。矩陣的正中間為n個字母中字典序最大的那個,從這個字母開始,沿著西北 正北 東北 正西 正東 西南 正南 東南八個方向各有一條由4大寫字...