精华内容
下载资源
问答
  • 七段码
    2021-02-06 15:34:41

    问题描述

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

    上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二极管,分别标记为 a, b, c, d, e, f, g。
    小蓝要选择一部分二极管(至少要有一个)发光来表达字符。
    在设计字符的表达时,要求所有发光的二极管是连成一片的。
    例如:b 发光,其他二极管不发光可以用来表达一种字符。
    例如:c 发光,其他二极管不发光可以用来表达一种字符。
    这种方案与上一行的方案可以用来表示不同的字符,尽管看上去比较相似。
    例如:a, b, c, d, e 发光,f, g 不发光可以用来表达一种字符。
    例如:b, f 发光,其他二极管不发光则不能用来表达一种字符,因为发光的二极管没有连成一片。
    请问,小蓝可以用七段码数码管表达多少种不同的字符?
    在这里插入图片描述

    思路分析

    这道题作为一个填空题,可以直接来做的,直接数有时候不失为一个好办法
    这个可以数发光的个数:
    1 : 7种
    2: 10种
    3: 16种
    4: 20种
    5: 19种
    6: 7种
    7: 1种
    ans = 7 + 10 + 16 + 20 + 19 + 7 + 1 = 80
    一共80种

    更多相关内容
  • #资源达人分享计划#
  • 七段码

    千次阅读 2021-03-09 16:51:44
    七段码 思路 并查集+递归 将abcdefg看成1234567数字,然后把能够联通的段用数组con[i][j]=1表示,比如1和2相邻可联通,则con【1】【2】=1 进行递归,先将1-7都点亮,有一种字符;再一步一步返回上一级,先是7灭,...

    七段码

    在这里插入图片描述

    思路

    并查集+递归

    1. 将abcdefg看成1234567数字,然后把能够联通的段用数组con[i][j]=1表示,比如1和2相邻可联通,则con【1】【2】=1
    2. 进行递归,先将1-7都点亮,有一种字符;再一步一步返回上一级,先是7灭,有一种字符;然后6灭,6灭的时候里面又分为7灭或者不灭,有几种字符;接着5灭,5灭的时候里面又分为6灭/不灭,7灭/不灭几种可能,有几种字符
    3. 定义一个全局变量ans,用来记录一共有几种字符,最后输出即可

    代码(来源网络,后自己理解)

    #include<stdio.h>
    const int n=8; //方便起见,数组用到1-7,不用0,因此定义8
    int vis[n],con[n][n],fa[n],ans=0;
     /*vis[i]表示单个二极管i是否发光,con[i][j]用来表示i和j之间
     是否联通,fa[i]表示i的根结点*/
    int getfa(int i) //用并查集求根结点
    {
    	if(fa[i]==i) return i;
    	else return fa[i]=getfa(fa[i]);
    }
    
    void dfs(int k) 
    {
    	int i,j,fx,fy,t;
    	if(k>7)
    	{
    		for(i=1;i<=7;i++)
    		   fa[i]=i; //先把所有的i的根结点定为自己本身
    		for(i=1;i<=7;i++)
    		   for(j=1;j<=7;j++)
    		     if(con[i][j]==1 && vis[i]==1 && vis[j]==1) 
    		     //如果i和j是联通的,并且i是亮着的,j也是亮着的
    		     {
    		     	fx=getfa(i);fy=getfa(j);//求i和j的根结点
    		     	if(fx!=fy)
    		     	  fa[fy]=fx; /*将j的根结点和i的根结点相连,
    		     	  比如1和2能联通并且都亮,1的根结点本来是1,2
    		     	  的根节点本来是2,那之后fa[2]=1,也就是2的根
    		     	  结点变成1,等到下次比较2和3的时候,就是
    		     	  fa[3]=fx=getfa(2)=1,这样1 2 3 就能连在一起*/
    			 }
    		t=0;
    		for(i=1;i<=7;i++)//求有几段亮的线路
    		   if(fa[i]==i && vis[i]==1) t++;
    		if(t==1) ans++; /*比如1 2亮,4 5亮,那就说明有两段亮
    		                的线路,不符合题目要求,必须只有一段
    		                线路才可以算一种字符*/
    		return ; /*终止函数,跳回上一级,比如dfs(8)运行到这
    		        里后,便不继续运行vis[8]=1这些,跳到上一级,即
    		        dfs(7+1)运行结束,继续vis[7]=0;*/
    	}
    	vis[k]=1;
    	dfs(k+1);
    	vis[k]=0;
    	dfs(k+1);
    }
    
    int main()
    {
    	con[1][1]=con[2][2]=1;con[1][6]=con[6][3]=1;
    	con[2][4]=con[3][5]=1;con[2][7]=con[7][6]=1;
    	con[3][7]=con[4][8]=1;con[3][7]=con[7][9]=1;
    	con[4][5]=con[5][10]=1;con[5][6]=con[6][5]=1;
    	con[5][7]=con[7][5]=1;con[6][7]=con[7][6]=1;
    	//将能联通相邻的两个二极管用1表示可联通
    	dfs(1);
    	printf("%d\n",ans);
    }
    
    

    答案
    在这里插入图片描述
    是通过看并查集和网上的代码理解的,有可能存在在某处的理解有误差

    展开全文
  • 七段码 字库

    2013-03-01 15:31:54
    七段码 字库,我收藏的一种七段码字体之一,对于做LCD的有帮助
  • 使用c语言编写的七段码显示器驱动,可与嵌入式等合用
  • 七段码显示

    2011-12-17 11:16:09
    基于8051F系列单片机的七段码显示!基于8051F系列单片机的七段码显示!
  • 变化七段码

    2014-09-05 12:00:52
    变化七段码,单片机 程序
  • 蓝桥杯python组——七段码

    千次阅读 2022-03-23 20:28:09
    蓝桥杯python组——七段码 import os import sys dic = {'a':['f','b'], 'b':['a','g','c'], 'c':['g','d','b'], 'd':['e','c'], 'e':['f','g','d'], 'f':['a','g','e'], 'g':['f','b','e','c']} import ...

    蓝桥杯python组——七段码

    在这里插入图片描述
    在这里插入图片描述

    import os
    import sys
    dic = {'a':['f','b'],
           'b':['a','g','c'],
           'c':['g','d','b'],
           'd':['e','c'],
           'e':['f','g','d'],
           'f':['a','g','e'],
           'g':['f','b','e','c']}
    import itertools
    totle = []
    for i in range(2,8):
      a = list(itertools.combinations('abcdefg',i))#i代表组合的长度,最短为2最长为7
      for j in a:
        totle.append(''.join(j))  #化元组为str
    #已经变成了['ab', 'ac',......'bcdefg', 'abcdefg']
    #然后就要排序''
    sum = 0
    for str1 in totle:
      for num in itertools.permutations(str1):#全排列
        for j in range(len(num)-1):  #判断例如'bcdefg'变成其他不同序列后是否符合
          if num[j+1] not in dic[num[j]]:
            break
        else:
          sum += 1
          break
    print(sum+7)#最后加7是因为,没有算单个管的,一共7个管所以加上7
    

    答案为80

    关于itertools.combinations用法,轻点链接传送

    点我点我!
    谢谢大家的支持,您的一键三连是 罡罡同学前进的最大动力!

    展开全文
  • 七段码字库

    2012-04-06 15:55:39
    这个是真正的七段数码字符,包括10个数字和26个字母,此前NI的不是七段码
  • 2020蓝桥杯省赛C/C++ 七段码 简单易懂的思路 本文思路来源于: 2016蓝桥杯c/c++省赛7–剪邮票 此处有该题的视频讲解(顺便感谢一下算法启蒙大佬): 蓝桦枫玥–2016蓝桥杯c/c++省赛7–剪邮票 以下放该题的思路和代码, ...

    2020蓝桥杯省赛C/C++ 七段码 简单易懂的思路

    本文思路来源于:
    2016蓝桥杯c/c++省赛7–剪邮票

    此处有该题的视频讲解(顺便感谢一下算法启蒙大佬):
    蓝桦枫玥–2016蓝桥杯c/c++省赛7–剪邮票

    以下放该题的思路和代码, 强烈建议先看懂该题, 再分析七段码, 会该题的大佬可以直接跳过~


    该题是对之前13年蓝桥杯题目剪格子的直接回应: 剪格子只考虑了 “L” 形 (只有两个端点) 的连通情况, 从一个端点搜到另一个端点符合条件就直接退出了。而忽略了 “T” 和 “十” 字形 (多个端点) , 而剪邮票使用的方法兼顾了这两种情况。

    而该题是一个无向图的情况, 类似于剪邮票的多个端点情况, 所以完全可以搬过来。

    具体思路为:

    1. 用一维数组和next_permutation去列出所有的情况, 然后映射到二维数组。
    2. 对二维数组进行检查, 只要遇到一个符合的块, 就去深搜所有的连通块,全部变成0, cnt++。
    3. 最后如果cnt=1说明只有一个连通块。

    ps: 因为该题采取了从1置0的方法, 所以不需要传统dfs的visit数组去判断某一点是否搜索过

    剪邮票完整代码
    #include <bits/stdc++.h>
    using namespace std;
    #define MAX 12
    // 该方法完美兼容"T"字形和"十"字形
    int a[MAX] = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1};
    // 映射数组
    int b[3][4] = {0};
    // 搜索顺序: 上左右下
    int u[4] = {-1, 0, 0, 1};
    int v[4] = {0, -1, 1, 0};
    // 将该点所有连通点全部置0
    void dfs(int x, int y)
    {
      b[x][y] = 0;
      // 按照上左右下的顺序进行搜索
      // 一个完整的过程为:将所有的区域置为0后, 退回开始点
      for (int i = 0; i < 4; i++)
      {
        int xx = x + u[i];
        int yy = y + v[i];
        // 若该点未越界并且还没有遍历
        if (xx >= 0 && xx < 3 && yy >= 0 && yy < 4 && b[xx][yy] == 1)
          dfs(xx, yy);
      }
    }
    bool check()
    {
        // 数组映射
      for (int i = 0; i < 3; i++)
        for (int j = 0; j < 4; j++)
          b[i][j] = a[4 * i + j];
      int cnt = 0;
      // 当区域为连通块时, 搜索后数组全部置为0, 则后面的循环全部不通过if语句
      // 若cnt>1, 说明存在不止一个区域
      for (int i = 0; i < 3; i++)
        for (int j = 0; j < 4; j++)
        {
        // 搜索到符合条件的点
          if (b[i][j] == 1)
          {
            dfs(i, j);
            cnt++;
          }
        }
      if (cnt == 1)
        return true;
      return false;
    }
    int main()
    {
      int ans = 0;
      do
      {
        if (check())
          ans++;
      } while (next_permutation(a, a + 12));
      cout << ans;
      return 0;
    }
    

    然后是七段码

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

    七段码

    七段码上图给出了七段码数码管的一个图示,数码管中一共有7 段可以发光的二极管,分别标记为a, b, c, d, e, f, g。小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符的表达时,要求所有发光的二极管是连成一片的。
    例如:b 发光,其他二极管不发光可以用来表达一种字符。
    例如:c 发光,其他二极管不发光可以用来表达一种字符。这种方案与上一行的方案可以用来表示不同的字符,尽管看上去比较相似。
    例如:a, b, c, d, e 发光,f, g 不发光可以用来表达一种字符。
    例如:b, f 发光,其他二极管不发光则不能用来表达一种字符,因为发光的二极管没有连成一片。
    请问,小蓝可以用七段码数码管表达多少种不同的字符?


    该题的思路跟上题大同小异, 只不过从一个二维的数组深搜变成了一个无向图, 而且不止连通5个。

    为了方便理解, 我们与上题一样进行三步走。

    1.初始化无向图, 用一维数组和next_permutation列出所有的情况, 然后映射到另一个一维数组

    // 无向图数组
    int a[MAX][MAX] = {0};
    // 亮灯数组
    int b[MAX] = {0};
    // 映射数组
    int c[MAX] = {0};
    // 初始化图
    void init()
    {
        // 表示两个位置相邻
        a[0][1] = 1;
        a[0][5] = 1;
        a[1][2] = 1;
        a[1][6] = 1;
        a[2][3] = 1;
        a[2][6] = 1;
        a[3][4] = 1;
        a[4][5] = 1;
        a[4][6] = 1;
        a[5][6] = 1;
    }
    
     // 可能亮1至7段
        for (int i = 0; i < MAX; i++)
        {
            // 初始化亮灯数组
            memset(b, 0, sizeof(b));
            // *注释1
            for (int j = 7; j >= i; j--)
            {
                b[j] = 1;
            }
            do
            {
                // 如果确实是一段
                if (check())
                    sum++;
            } while (next_permutation(b, b + MAX));
        }
    

    *注释1:
    此处注意一个小问题: next_permutation的全排列中的1一定要从后面往前加, 如果初始化为{1,1,1,0,0,0,0}, 则全排列只有这一种情况, 必须初始化为{0,0,0,0,1,1,1}。


    2.check函数检查该状态是否符合条件, 搜索一个连通点, 然后去深搜它的相邻点, 将它们全部变成0, 同时flag++, 若flag=1, 说明是单连通块, 否则就是多个连通块。

    bool check()
    {
        // 数组映射
        for (int i = 0; i < MAX; i++)
        {
            c[i] = b[i];
        }
        int flag = 0;
        for (int i = 0; i < MAX; i++)
        {
            // 如果i位置亮灯
            if (c[i])
            {
                // 把他周围的灯全部灭掉
                dfs(i);
                // 连通块数+1
                flag++;
            }
        }
        // 如果全连着, 也就是上述if语句只符合了一次
        if (flag == 1)
            return true;
        return false;
    }
    

    3.dfs函数进行深搜, 若搜索到i点与k点相连, 则递归进入i点。

    // 深搜与k相邻的点并且关掉
    void dfs(int k)
    {
        // 把k位置关掉
        c[k] = 0;
        for (int i = 0; i < MAX; i++)
        {
            // 若i位置与k位置相连
            if (a[i][k] || a[k][i])
            {
                // 若i位置亮着灯
                if (c[i])
                {
                    // 深搜
                    dfs(i);
                }
            }
        }
    }
    

    最后放上完整代码

    七段码完整代码
        #include <bits/stdc++.h>
        #define MAX 7
        using namespace std;
        // 相邻数组
        int a[MAX][MAX] = {0};
        // 亮灯数组
        int b[MAX] = {1, 1, 0, 1, 1, 1, 0};
        // 映射数组
        int c[MAX] = {0};
        // 初始化图
        void init()
        {
            a[0][1] = 1;
            a[0][5] = 1;
            a[1][2] = 1;
            a[1][6] = 1;
            a[2][3] = 1;
            a[2][6] = 1;
            a[3][4] = 1;
            a[4][5] = 1;
            a[4][6] = 1;
            a[5][6] = 1;
        }
        // 深搜相邻的点并且关掉
        void dfs(int k)
        {
            // 把k位置关掉
            c[k] = 0;
            for (int i = 0; i < MAX; i++)
            {
                // 若i位置与k位置相连
                if (a[i][k] || a[k][i])
                {
                    // 如果i位置亮着灯
                    if (c[i])
                    {
                        // 深搜
                        dfs(i);
                    }
                }
            }
        }
        bool check()
        {
            // 数组映射
            for (int i = 0; i < MAX; i++)
            {
                c[i] = b[i];
            }
            int flag = 0;
            for (int i = 0; i < MAX; i++)
            {
                // 如果i位置亮灯
                if (c[i])
                {
                    // 把他周围的灯全部灭掉
                    dfs(i);
                    // 连通块数+1
                    flag++;
                }
            }
            // 如果全连着
            if (flag == 1)
                return true;
            return false;
        }
        int main()
        {
            init();
            int sum = 0;
            // 可能亮1至7段
            for (int i = 0; i < MAX; i++)
            {
                // 初始化亮灯数组
                memset(b, 0, sizeof(b));
                for (int j = 7; j >= i; j--)
                {
                    b[j] = 1;
                }
                do
                {
                    // 如果确实是一段
                    if (check())
                        sum++;
                } while (next_permutation(b, b + MAX));
            }
            cout << sum;//结果为80
        }
    
    展开全文
  • 2020年蓝桥杯七段码

    千次阅读 多人点赞 2021-04-13 20:08:16
    第五题:七段码 题目描述 小蓝要用七段码数码管来表示一种特殊的文字。 七段码上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二极管,分别标记为 a, b, c, d, e, f, g。小蓝要选择一部分二极管...
  • 接口技术实验:七段码显示。本实验资源由8086主控,8255作为七段码显示器的驱动,包含该实验所用到的全部Proteus工程图,包含源码,打开运行即可使用。实验由Proteus 8版本配置设计,低版本的需要更新版本才能正常...
  • 【蓝桥杯2020Java】七段码。通俗易懂

    万次阅读 2021-04-10 14:54:31
    七段码 这道题我只能说:一定要细心,我写了差不多有一个小时(不是在考场),写代码之前一定要有思路啊,要不写的时候很麻烦!我这里给的思路就是,用Map保存key(字母)和value(key字母可以连通的字母),总共七个...
  • 试题 E: 七段码

    千次阅读 2020-11-02 20:26:38
    试题 E: 七段码 本题总分:15 分 【问题描述】 小蓝要用七段码数码管来表示一种特殊的文字。 上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二 极管,分别标记为 a, b, c, d, e, f, g。 小蓝要...
  • 第十一届蓝桥杯 ——七段码

    千次阅读 多人点赞 2020-11-09 16:55:59
    小蓝要用七段码数码管来表示一种特殊的文字。 上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二极管,分别标记为 a, b, c, d, e, f, g。 小蓝要选择一部分二极管(至少要有一个)发光来表达字符...
  • 小蓝要用七段码数码管来表示一种特殊的文字。 上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二极管,分别标记为 a, b, c, d, e, f, g。小蓝要选择一部分二极管(至少要有一个)发光来表达字符...
  • [蓝桥杯2020] E题.七段码 //dfs+并查集

    万次阅读 多人点赞 2020-10-20 21:33:41
    小蓝要用七段码数码管来表示一种特殊的文字。 上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二 极管,分别标记为 a, b, c, d, e, f, g。 小蓝要选择一部分二极管(至少要有一个)发光来表达字符...
  • [蓝桥杯2020] E题.七段码(全排列)

    千次阅读 2021-03-15 17:16:24
    小蓝要用七段码数码管来表示一种特殊的文字。 上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二 极管,分别标记为 a, b, c, d, e, f, g。 小蓝要选择一部分二极管(至少要有一个)发光来表达字符...
  • 蓝桥杯--七段码整理总结

    千次阅读 多人点赞 2020-10-25 17:14:45
    小蓝要用七段码数码管来表示一种特殊的文字。 在这里插入图片描述 上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二 极管,分别标记为 a, b, c, d, e, f, g。 小蓝要选择一部分二极管(至少要有...
  • 七段码电子表显示程序.docx
  • 蓝桥杯 七段码 枚举所有情况 80种

    千次阅读 多人点赞 2020-10-19 11:50:15
    tot = 7 + 10 + 16 + 20 + 19 + 7 + 1 = 80
  • 这个题真的不是很简单,主要是很...public class 七段码 { static int[] arr = {0,1,2,3,4,5,6}; public static void main(String[] args) { // System.out.println(7+7+1+10+16+20+19); int ans = 7;
  • 七段码 小蓝要用七段码数码管来表示一种特殊的文字。 上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二极管,分别标记为 a, b, c, d, e, f, g。 小蓝要选择一部分二极管(至少要有一个)发光来...
  • 蓝桥杯2020 10月省赛试题E:七段码

    千次阅读 2020-10-18 11:19:42
    思路:每个数码管都有两种选择,亮或者不亮。其实就是{a, b, c, d, e, f, g}的所有子集,然后从所有子集中选出...public class D七段码 { static int n = 7; static int ans = 0; static int[][] map = new int[n.
  • import java.util.ArrayList; public class Main { static int cnt = 0; static boolean[] isVisited = new boolean[7];;//判断是否访问 static ArrayList<Integer>... static boolean[] isCheck = new ...
  • 第十一届蓝桥杯第二次省赛—E题七段码 题目描述: 小蓝要用七段码数码管来表示一种特殊的文字。 上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二 极管,分别标记为 a, b, c, d, e, f, g。 ...
  • 小蓝要用七段码数码管来表示一种特殊的文字。 上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二 极管,分别标记为 a, b, c, d, e, f, g。 小蓝要选择一部分二极管(至少要有一个)发光来表达字符...
  • 螺杆机七段码显示操作PPT学习教案.pptx
  • 蓝桥杯真题:七段码

    千次阅读 2021-11-11 23:28:43
    上图给出了七段码数码管的一个图示,数码管中一共有7段可以发光的二极管,分别标记为a, b, c, d, e, f, g 小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符的表达时,要求所有发光的二极管是连成...
  • 通过在Quartus进行代码的编写,列写出共阴极数码管的写法,从而进行综合,并用RTL进行观察。理解阻塞赋值与非阻塞赋值的概念。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 172,705
精华内容 69,082
关键字:

七段码