[2020蓝桥杯省赛] 七段码 python

该博客探讨了如何利用广度优先搜索算法判断七段码数码管上的二极管是否能形成连通的发光状态,从而计算出可用的字符数量。博主通过建立邻接表并遍历所有可能的二进制状态,最终得出答案。内容涉及二进制、图论和算法应用。
摘要由CSDN通过智能技术生成

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小蓝要用七段码数码管来表示一种特殊的文字。

上图给出了七段码数码管的一个图示,数码管中一共有 77 段可以发光的二极管,分别标记为 a, b, c, d, e, f, g。

小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符的表达时,要求所有发光的二极管是连成一片的。

例如:b 发光,其他二极管不发光可以用来表达一种字符。

例如:c 发光,其他二极管不发光可以用来表达一种字符。这种方案与上 一行的方案可以用来表示不同的字符,尽管看上去比较相似。

例如:a, b, c, d, e 发光,f, g 不发光可以用来表达一种字符。

例如:b, f 发光,其他二极管不发光则不能用来表达一种字符,因为发光 的二极管没有连成一片。

请问,小蓝可以用七段码数码管表达多少种不同的字符?

解法:

        利用二进制串表示七段码所有开关状态,0~6位分别表示a~g管,并且按照题意写出邻接表.

        采用广度优先搜索的思想判断 七段码是否连通.

import queue

Map = {'0': ['1', '5'],
       '1': ['0', '2', '6'],
       '2': ['1', '3', '6'],
       '3': ['2', '4'],
       '4': ['3', '5', '6'],
       '5': ['0', '4', '6'],
       '6': ['1', '2', '4', '5']
       }


def check(s):
    vis = set()
    q = queue.Queue()
    for w in range(len(s)):
        if s[w] == '1':
            vis.add(str(w))
    q.put(vis.pop())
    while not q.empty():
        node = q.get()
        for next_node in Map[node]:
            if next_node in vis:
                q.put(next_node)
                vis.remove(next_node)
            else:
                continue
    if vis:
        return False
    else:
        return True


ans = 0
for i in range(1, 128):
    if check(f'{i:07b}'):
        ans += 1
print(ans)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值