藍橋杯 七段碼

2021-10-22 17:26:34 字數 2133 閱讀 5249

題目描述:

小藍要用七段碼數碼管來表示一種特殊的文字。

上圖給出了七段碼數碼管的乙個圖示,數碼管中一共有 7 段可以發光的二

極管,分別標記為 a, b, c, d, e, f, g。

小藍要選擇一部分二極體(至少要有乙個)發光來表達字元。在設計字元

的表達時,要求所有發光的二極體是連成一片的。

例如:b 發光,其他二極體不發光可以用來表達一種字元。

例如:c 發光,其他二極體不發光可以用來表達一種字元。這種方案與上

一行的方案可以用來表示不同的字元,儘管看上去比較相似。

例如:a, b, c, d, e 發光,f, g 不發光可以用來表達一種字元。

例如:b, f 發光,其他二極體不發光則不能用來表達一種字元,因為發光

的二極體沒有連成一片。

請問,小藍可以用七段碼數碼管表達多少種不同的字元?

答案:80

思路:

(覺得我囉嗦的可以直接看**,有詳細注釋,還是挺好理解的)

大體思路並不難,分成兩部分:一部分是遍歷所有情況,第二部分是檢查某種情況下是否連通。遍歷比較簡單,難點就在於如何檢查連通。可以用並查集,不過我看別人弄的也挺複雜的,就沒用並查集。(雖然我寫的也挺複雜,,)

方便起見,把a,b,c,d,e,f這七段轉換成0,1,2,3,4,5,6。像這樣:

可以用字串陣列來儲存連通的情況,比如str[1]=「026」。

用陣列表示每個邊的亮滅情況,索引代表邊,1代表亮,0代表滅。

string str[7];

int arr[7] = ;

void init()

然後怎麼判斷連通呢?我最初(其實不是)想的是:遍歷 arr,儲存所有值為 1 的索引到 v 中,然後再遍歷v中的每乙個索引i,在其餘值為1的索引所對應的 str 中找 i,如果其中有乙個找到,就說明整個是連通的,如果都沒有找到,就是不連通的。

這麼想乍看沒什麼問題,但是執行結果是83。說明還有情況沒有考慮到。我對著所有判斷為連通的字串乙個乙個找,終於發現了其他情況。就是0 1 亮,3 4滅。這種情況會被判斷為連通。

這種情況的特徵是:有多個邊只被找到了一次。而正常連通的情況下,最多隻會有兩個邊只被找到一次。按照這種思路修改**,終於對了。

感想:有我思考+寫**+除錯的時間都夠我乙個乙個數數5遍以上了,總共也就不超過128種,考試遇到這種填空題完全可以乙個乙個地數,不放心還能多數幾遍,寫**很容易漏掉某些情況,反而容易錯。。。。

完整**:

#include using namespace std;

string str[7]; //儲存與第i段連通的邊

int arr[7] = ; //表示每段的亮滅,1表示亮,0表示滅

void init() //初始化str

bool check() //檢查arr確定是否連通

}if (s.length() == 0)

return false;

if (s.length() == 1)

return true;

vectorv; //儲存每個邊被找到的次數

for (int i = 0; i < s.length(); i++)

}if (num == 0)

return false;

v.push_back(num);

}int count = 0; //被找到次數為1的邊的個數

for (auto i : v)

if (count > 2)

return false;

return true;

}string tostring(int n) //十進位制轉成7位二進位制字串

return s;

}int fun()

if (check())

}return ans;

}int main()

藍橋杯 七段碼

小藍要用七段碼數碼管來表示一種特殊的文字。上圖給出了七段碼數碼管的乙個圖示,數碼管中一共有 7 段可以發光的二極體,分別標記為 a,b,c,d,e,f,g。小藍要選擇一部分二極體 至少要有乙個 發光來表達字元。在設計字元的表達時,要求所有發光的二極體是連成一片的。例如 b 發光,其他二極體不發光可以...

藍橋杯 七段碼 並查集

今天學到了乙個新的演算法 並查集 不得不說 太好用惹!嗷!所以先來復盤一下並查集的思路 我在網上找了乙個很生動的解釋,講的非常好,又能聽懂知識點,又能記得牢,附上原博連線 這是個鏈結 他是以武林為例講的並查集,並查集的作用呢,就是看乙個圖里的連通分支有幾個,如果是乙個,就代表連通圖 如果是兩個,就要...

七段碼(藍橋杯真題) python求解

題目如下 小藍要用七段碼數碼管來表示一種特殊的文字。上圖給出了七段碼數碼管的乙個圖示,數碼管中一共有 7 段可以發光的二極體,分別標記為 a,b,c,d,e,f,g。小藍要選擇一部分二極體 至少要有乙個 發光來表達字元。在設計字元的表達時,要求所有發光的二極體是連成一片的。例如 b 發光,其他二極體...