題目的意思很明確,要我們通過輸入的數字來構建乙個顯示屏,使得上面顯示這些數字。
許多題解裡建立了乙個三維char
陣列來儲存每乙個數字,然後進行輸出,其中打表浪費了大量的時間。我想,既然樣例輸出裡就有現成的\(0 \to 9\)每乙個數字的形狀,為什麼不直接拿過來用呢?
首先我建立了乙個陣列base_1
來儲存樣例輸出,注意這裡行和列的大小一定要準確,因為字串是以\0
結尾的,獨佔乙個空間:
char base_1[5][40]=;
這裡的注釋0 2 4 6 8
是什麼意思,之後會提到。
我們將答案儲存在一張畫布(即「顯示屏」)內。now
是什麼意思,一會兒也會說。
char pict[6][9999];//畫布,即題目中的"顯示屏"。
int now=0;//表示這個數字應該在畫布的第幾個位置寫入
這裡我的想法是,掃瞄輸入的數字串,然後依次轉化成真實數字。接下來的工作是從base_1
中「摳取」需要的數字。根據上面的注釋,我們會發現,數字\(i\)在base_1
中對應的範圍是(只寫出橫向座標,縱向座標就是\(0 \to 4\)):\([4i,4i+2]\)。依據這個性質,我們就可以「摳取」需要的數字。
那麼怎麼把摳出來的數字寫入到畫布裡呢?這裡now
就派上用場了。now
儲存的是下乙個數字要在橫向座標的什麼位置輸入畫布。一開始,now=0
,然後插入乙個數字(比如說\(0\))之後,now
就應該移到4
的位置。再在這裡插入乙個數字1
。每次插入乙個數字,now
就要後移4
格。它的作用相當於電腦游標。至於補全一列'.'
的時候,我們直接從now-1
的位置插入就行。
處理相對位置有點麻煩,詳見注釋。注意陣列的第一維是縱向座標,第二維才是橫向。並且都是從\(0\)開始索引計數的:
void work(string s);
char pict[6][9999];//畫布,即題目中的"顯示屏"。
int now=0;//表示這個數字應該在畫布的第幾個位置寫入
int len;//字串長度
void work(string s)
洛谷 P5730 顯示屏
液晶屏上,每個阿拉伯數字都是可以顯示成 3 5 的點陣的 其中 x 表示亮點,表示暗點 現在給出數字位數 不超過 100 和一串數字,要求輸出這些數字在顯示屏上的效果。數字的顯示方式如同樣例輸出,注意每個數字之間都有一列間隔。這題歸納在陣列的類別中,但我感覺它更像是側重考查字串,畢竟用到了字串的一點...
P5728 深基5 例5 旗鼓相當的對手
題目描述 現有 n n 1000 名同學參加了期末考試,並且獲得了每名同學的資訊 語文 數學 英語成績 均為不超過 150 的自然數 如果某對學生 的每一科成績的分差都不大於 5,且總分分差不大於 10,那麼這對學生就是 旗鼓相當的對手 現在想知道這些同學中,有幾對 旗鼓相當的對手 同樣乙個人可能會...
P5728 深基5 例5 旗鼓相當的對手
題目描述 現有 n n 1000 名同學參加了期末考試,並且獲得了每名同學的資訊 語文 數學 英語成績 均為不超過 150 的自然數 如果某對學生 的每一科成績的分差都不 大於 5,且總分分差不大於 10,那麼這對學生就是 旗鼓相當的對手 現在想知道 這些同學中,有幾對 旗鼓相當的對手 同樣乙個人可...