P5730 深基5 例10 顯示屏

2022-05-30 16:42:15 字數 1273 閱讀 8929

題目的意思很明確,要我們通過輸入的數字來構建乙個顯示屏,使得上面顯示這些數字。

許多題解裡建立了乙個三維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,那麼這對學生就是 旗鼓相當的對手 現在想知道 這些同學中,有幾對 旗鼓相當的對手 同樣乙個人可...