[藍橋杯]七段碼(Python 實現)
阿新 • • 發佈:2021-02-07
題目:
【問題描述】
小藍要用七段碼數碼管來表示一種特殊的文字。
上圖給出了七段碼數碼管的一個圖示,數碼管中一共有 7 段可以發光的二極體,分別標記為 a, b, c, d, e, f, g。
小藍要選擇一部分二極體(至少要有一個)發光來表達字元。
在設計字元的表達時,要求所有發光的二極體是連成一片的。
例如:b 發光,其他二極體不發光可以用來表達一種字元。
例如:c 發光,其他二極體不發光可以用來表達一種字元。
這種方案與上一行的方案可以用來表示不同的字元,儘管看上去比較相似。
例如:a, b, c, d, e 發光,f, g 不發光可以用來表達一種字元。例如:b, f 發光,其他二極體不發光則不能用來表達一種字元,因為發光的二極體沒有連成一片。
請問,小藍可以用七段碼數碼管表達多少種不同的字元?
【答案提交】
這是一道結果填空的題,你只需要算出結果後提交即可。
本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多餘的內容將無法得分。
程式碼:
import itertools
class UFS:
def __init__(self,n):
self.count=0
self.father=[x for x in range(n)]
def find(self,x):
root= x
while self.father[root]!=root:
root=self.father[root]
return root
def union(self,x,y):
x,y=self.find(x),self.find(y)
if x!=y:
self.father[y]=x
self.count+=1
return 0
result=0
nums=[x for x in range(7)]
for x in range(1,8 ):#每次用的電晶體的個數
for k in (itertools.combinations(nums,x)):#從所有的電晶體中按個數要求不重複的拿。
l=len(k)#電晶體的個數
ufs=UFS(l)
#兩兩的逐個選取。
for a in range(l):
for b in range(a+1,l):
#根據下圖的數字判斷兩個電晶體是否相鄰。
if abs(k[a]-k[b])==1 or (k[a]==1 and k[b]==6) or (k[a]==2 and k[b]==6) or (k[a]==4 and k[b]==6) or (k[a]==0 and k[b]==5):
ufs.union(a,b)
if l-ufs.count==1:#比如當用到三個二極體的時候只需要連結兩次,那麼當晶體管個數減去連結次數為1的時候符合要求。
result+=1
print(result)
結果:80