Python藍橋杯練習 歷屆試題 打印十字圖


題目

問題描述

樣例輸入輸出

思路

最初我是沒有看出什么規律的,但是如果將圖案畫在本子上,就可以看出端倪了(字符顯示有一些失真)。
從最中間開始看樣例1,最中間的是一個由' $ '組成的十字架,向外圍看,又由一層' . '圍了起來,在外圍又由' $ '圍起來,以此類推。
一層包括了最中間的五個長度的' $ '十字架和外面一層' . '和一層' $ '
問題描述中的為三層,包括最中間的五個長度的' $ '十字架和外面三層' . '和三層' $ '
這樣規律便找到了!!!~

實現

我看到其他人將圖形分為了四塊,每塊中又分為上中下三部分,之后依次按照每個部分打印
分塊

我的思路是從中間開始的,所以我想到先用數組(列表)占用內存,再從中間向外邊填充(默認所有都是點,填充$),而且這樣可能時間復雜度較高一些...姑且這么做把

規模是 5+2*2*層數,5是中心十字架的長度,第一個2是對稱性,第二個2是一層' $ '一層' . '
最中心的行是 3+層數*2,列也是這樣(第一行開始算起)(代碼從第0行)

每塗一層,都要遍歷整個網格,將他們周邊的(以已經塗色的為中心,3*3的小網格)沒有塗過的,塗為另一種符號,每次塗一層
當層數為1時,塗一層' . ',塗一層' $ '
當層數為2時,塗一層' . ',塗一層' $ ',塗一層' . ',塗一層' $ '
在輸出時,將未塗色的和塗色為2的顯示輸出為' . ',將塗色為1的輸出為' $ '

Python實現源代碼

n=int(input())

lst=[[0 for j in range(5+4*n)] for i in range(5+4*n)]

# 0代表未塗色
# 1代表$
# 2代表.

for i in range(-2,3):
    lst[2+2*n][2+2*n+i]=1   # 中心行
for i in range(-2,3):
    lst[2+2*n+i][2+2*n]=1   # 中心列



def paint(color):
    # 將$的外層變為.
    if(color==1):
        for i in range(5+4*n):
            for j in range(5+4*n):
                if(lst[i][j]==1):
                    for u in range(-1,2):
                        for v in range(-1,2):
                            if(i+u>=0 and i+u<5+4*n and j+v>=0 and j+v<5+4*n):
                                if(lst[i+u][j+v]==0):
                                    lst[i+u][j+v]=2
    # 將.的外層變為$
    else:
        for i in range(5+4*n):
            for j in range(5+4*n):
                if(lst[i][j]==2):
                    for u in range(-1,2):
                        for v in range(-1,2):
                            if(i+u>=0 and i+u<5+4*n and j+v>=0 and j+v<5+4*n):
                                if(lst[i+u][j+v]==0):
                                    lst[i+u][j+v]=1

for i in range(n):
    paint(1)
    paint(2)

for i in range(5+4*n):
    for j in range(5+4*n):
        if(lst[i][j]==1):
            print("$",end="")
        else:
            # 最后會有角落未塗色,但都是輸出.
            print(".",end="")
    print()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM