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

2021-10-19 07:04:20 字數 2238 閱讀 7353

題目如下:

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

上圖給出了七段碼數碼管的乙個圖示,數碼管中一共有 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 發光,其他二...

藍橋杯 七段碼 並查集

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