題目如下:
小藍要用七段碼數碼管來表示一種特殊的文字。
上圖給出了七段碼數碼管的乙個圖示,數碼管中一共有 7 段可以發光的二極體,分別標記為 a, b, c, d, e, f, g。
小藍要選擇一部分二極體(至少要有乙個)發光來表達字元。
在設計字元的表達時,要求所有發光的二極體是連成一片的。
例如:b 發光,其他二極體不發光可以用來表達一種字元。
例如:c 發光,其他二極體不發光可以用來表達一種字元。
這種方案與上一行的方案可以用來表示不同的字元,儘管看上去比較相似。
例如:a, b, c, d, e 發光,f, g 不發光可以用來表達一種字元。
例如:b, f 發光,其他二極體不發光則不能用來表達一種字元,因為發光的二極體沒有連成一片。
請問,小藍可以用七段碼數碼管表達多少種不同的字元?
【答案提交】
這是一道結果填空的題,你只需要算出結果後提交即可。
本題的結果為乙個整數,在提交答案時只填寫這個整數,填寫多餘的內容將無法得分。
這道題採用dfs和並查集進行解決,用並查集進行判斷是否連通,用dfs進行深度搜尋:
並查集的python介紹與實現
import numpy as np
result =
0parent =[0
for _ in
range(7
)]m =[
0for _ in
range(7
)]e = np.zeros((7
,7))
#我們首先利用圖來建立乙個聯通關係,可以連通的我們標記為1
#我們用0123456代替abcdefge[0
][1]
= e[0]
[5]=
1e[1]
[0]= e[1]
[6]= e[1]
[2]=
1e[2]
[1]= e[2]
[3]= e[2]
[6]=
1e[3]
[2]= e[3]
[4]=
1e[4]
[3]= e[4]
[5]= e[4]
[6]=
1e[5]
[0]= e[5]
[4]= e[5]
[6]=
1def
find
(x):
if x != parent[x]
: parent[x]
= find(parent[x]
)return parent[x]
return x
defunion
(x1, x2)
: root_x, root_y = find(x1)
, find(x2)
if root_x != root_y:
parent[root_x]
= root_y
#上面兩個並查集模板
defsumx
(a):
global result
#在這裡並不是優先進行,優先進行下面的dfs
if a >6:
for i in
range(7
):parent[i]
= i for i in
range(7
):for j in
range(7
):#滿足條件鏈結時我們連線兩者
if e[i]
[j]and m[i]
and m[j]
: union(i, j)
k =0for i in
range(7
):#判斷是否只有一條路聯通
if m[i]
and parent[i]
== i:
k +=
1if k ==1:
result +=
1return
#不斷地往下計算,把所有情況全部包括
m[a]=1
sumx(a+1)
m[a]=0
sumx(a+1)
sumx(0)
#我們從第乙個開始進行dfs
print
(result)
答案:8 藍橋杯 七段碼
小藍要用七段碼數碼管來表示一種特殊的文字。上圖給出了七段碼數碼管的乙個圖示,數碼管中一共有 7 段可以發光的二極體,分別標記為 a,b,c,d,e,f,g。小藍要選擇一部分二極體 至少要有乙個 發光來表達字元。在設計字元的表達時,要求所有發光的二極體是連成一片的。例如 b 發光,其他二極體不發光可以...
藍橋杯 七段碼
題目描述 小藍要用七段碼數碼管來表示一種特殊的文字。上圖給出了七段碼數碼管的乙個圖示,數碼管中一共有 7 段可以發光的二 極管,分別標記為 a,b,c,d,e,f,g。小藍要選擇一部分二極體 至少要有乙個 發光來表達字元。在設計字元 的表達時,要求所有發光的二極體是連成一片的。例如 b 發光,其他二...
藍橋杯 七段碼 並查集
今天學到了乙個新的演算法 並查集 不得不說 太好用惹!嗷!所以先來復盤一下並查集的思路 我在網上找了乙個很生動的解釋,講的非常好,又能聽懂知識點,又能記得牢,附上原博連線 這是個鏈結 他是以武林為例講的並查集,並查集的作用呢,就是看乙個圖里的連通分支有幾個,如果是乙個,就代表連通圖 如果是兩個,就要...