藍橋杯 歷屆試題 打印十字圖(C語言,因爲我還不會C++)

題目

問題描述

小明爲某機構設計了一個十字型的徽標(並非紅十字會啊),如下所示:

對方同時也需要在電腦dos窗口中以字符的形式輸出該標誌,並能任意控制層數。

輸入格式

一個正整數 n (n<30) 表示要求打印圖形的層數。

輸出格式

對應包圍層數的該標誌。

樣例輸入1

1

樣例輸出1

樣例輸入2

3

樣例輸出2

提示

請仔細觀察樣例,尤其要注意句點的數量和輸出位置。

 

 

正文:

 

白的說,雖然看着那一圈圈的很好看,似乎有某種規律,然而我也不知道怎麼下手,(下圖爲添加空格之後的圖案)

在看了另一位博主的文章之後,他是用的分八塊兒輸出(將1/8的圖經過旋轉和對稱,可以得到所求的圖),不過我不喜歡這種方式,我更喜歡一步到位將其搞定。所以聯繫圖形的特點,再經過一番思考之後,我有了如下這個方法。

思路:就像題目裏說的(要求打印十字圖形的層數),而上邊的圖裏面也能看出這是非常有規律,一層一層的,0層($)和2層($)之間的1層(.)全是與之不同的符號(即:每兩層之間都被另一種符號填滿)。觀察到這個特點之後,想到遍歷0層的符號($)將每一個'$'周圍的符號(8個)凡不是'$'的全部變成' . ',將這些變成' . '的座標記錄下來,待0層遍歷完後,再遍歷記錄下來的這一層,依次類推。

核心:直接建立0層的十字,然後遍歷0層的每一個符號,周圍八個符號中,凡不是自己人(數組中表示爲\0),使之爲相反的符號(這裏 . 和 $ 相反),記錄每一層的每個點,一層遍歷完之後再遍歷下一層。

 

代碼:(按照函數執行順序查看)

(代碼年久失修,被作者刪了)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章