程式設計思維與實踐 月模擬題1 Blog

2021-10-04 17:52:17 字數 2694 閱讀 2995

用 ascii 字元來畫圖是一件有趣的事情,並形成了一門被稱為 ascii art 的藝術。例如,下圖是用 ascii 字元畫出來的 cspro 字樣。

本題要求程式設計實現乙個用 ascii 字元來畫圖的程式,支援以下兩種操作:

畫線:給出兩個端點的座標,畫一條連線這兩個端點的線段。簡便起見題目保證要畫的每條線段都是水平或者豎直的。水平線段用字元 - 來畫,豎直線段用字元 | 來畫。如果一條水平線段和一條豎直線段在某個位置相交,則相交位置用字元 + 代替。

填充:給出填充的起始位置座標和需要填充的字元,從起始位置開始,用該字元填充相鄰位置,直到遇到畫布邊緣或已經畫好的線段。注意這裡的相鄰位置只需要考慮上下左右 4 個方向.

input

第1行有三個整數m, n和q。m和n分別表示畫布的寬度和高度,以字元為單位。q表示畫圖操作的個數。

第2行至第q+1

q + 1

q+1行,每行是以下兩種形式之一:

0 x1 y1 x2 y2:表示畫線段的操作,(x1, y1)和(x2, y2)分別是線段的兩端,滿足要麼x1 = x2 且y1 ≠ y2,要麼 y1 = y2 且 x1 ≠ x2。

1 x y c:表示填充操作,(x, y)是起始位置,保證不會落在任何已有的線段上;c 為填充字元,是大小寫字母。

畫布的左下角是座標為 (0, 0) 的位置,向右為x座標增大的方向,向上為y座標增大的方向。這q個操作按照資料給出的順序依次執行。畫布最初時所有位置都是字元 .(小數點)。

sample input:

16 13 9

0 3 1 12 1

0 12 1 12 3

0 12 3 6 3

0 6 3 6 9

0 6 9 12 9

0 12 9 12 11

0 12 11 3 11

0 3 11 3 1

1 4 2 c

output

輸出有n行,每行m個字元,表示依次執行這q個操作後得到的畫圖結果。

下面針對這道具體題目分析一下細節的處理和技巧,首先是在畫線操作過程中,由於x,y中一定有乙個值相同,所以兩次分類討論即可,但是要注意 「+」

「+」「+

」 在畫線過程中的處理,在如下兩種情況需要賦值為「+」

「+」「+

」:

void

line

(int x1,

int y1,

int x2,

int y2)

for(

int i = y1; i <= y2; i++)}

else

for(

int i = x1; i <= x2; i++)}

}

在畫線操作完成後就要進行bfs填充操作,那麼這道題廣度優先搜尋過程中佇列的壓入(push)條件有哪些?尋找合法路徑作為下一層搜尋點,不滿足push條件的情況有:

超出迷宮邊界的路徑

標識為「+」、「-」、「|」的障礙物路徑

void

bfs(

int x,

int y,

char c)}}

}}

綜上所述,這道題目的全部**如下:

#include

#include

using

namespace std;

struct point};

int dx=

;int dy=

;int m, n, q;

char mp[

101]

[101];

void

line

(int x1,

int y1,

int x2,

int y2)

for(

int i = y1; i <= y2; i++)}

else

for(

int i = x1; i <= x2; i++)}

}void

bfs(

int x,

int y,

char c)}}

}}intmain()

}for

(int i =

0; i < q; i++

)else

if(op ==1)

}for

(int i = n-

1; i >=

0; i--)}

return0;

}

tip:最後補充一點之前沒有了解到的小知識,在全域性環境中宣告全域性變數陣列時,如果是int型陣列則預設賦值為 0 ,如果是char則預設賦值為 「\0」 ,而且如果能夠在全域性宣告然後在函式中處理的變數盡量都宣告為全域性變數,因為函式傳參會產生很大的時間消耗,尤其是較大的陣列在傳參時較為占用時間!

程式設計思維與實踐 月模擬題2 Blog

題目具體描述不再貼上,如有需要可參照csp模擬考試 這道題目的思路較為簡單,主要考察細心程度,不要因為考慮不全而丟分。而具體的實現其實有兩種方式 下面只介紹直接模擬的方法,因為思路比較直接,而且具體寫起來也並不麻煩。首先需要判斷路徑的情況,如果是絕對路徑 以上情況處理完成之後還需要考慮末尾的情況 對...

程式設計思維與實踐 月模擬題3 Blog

題目具體描述不再貼上,如有需要可參照csp模擬考試 csp模擬考試 summon 直接呼叫vector裡面的插入即可 attack 雙方血量減少 並且判斷攻擊方血量是否 0,如果是那麼直接erase 如果被攻擊的不是英雄並且血量 0那麼直接erase end 轉換玩家,進入下一回合。下面是題目的全部...

程式設計思維與實踐 月模擬題4 Blog

題目具體描述不再貼上,如有需要可參照csp模擬考試 csp模擬考試 所以我們從後往前遍歷,不斷地判斷是否匹配vector當中的字串,如果一直到文件開始都沒有匹配完全,那麼說明匹配失敗,繼續判斷下一行的元素。include include include include include using n...