第十一届蓝桥杯A组省赛填空试题 D: 七段码(Java)

简介: 第十一届蓝桥杯A组省赛填空试题 D: 七段码(Java)

试题 D: 七段码

本题总分:10 分


【问题描述】

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


3550775fc4b1484884d6e48250ed63f8.jpg


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

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


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

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

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

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

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


【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


【思路】

深度优先搜索+状态压缩+HashSet唯一性


【Java代码】


package lanqiao2020;
import java.util.ArrayList;
import java.util.HashSet;
public class test {
  //使用HashSet可以唯一性存储符合条件的数码管亮灭情况状态
  static HashSet<Integer> set = new HashSet<>(); 
  //使用邻接链表存储数码管连通情况
  static ArrayList<Integer>[] list = new ArrayList[7];
  public static void main(String[] args) {
  //初始化连通情况
  for(int i = 0; i < 7; i++) {
    list[i] = new ArrayList<Integer>();
  }
  list[0].add(1);
  list[0].add(5);
  list[1].add(0);
  list[1].add(6);
  list[1].add(2);
  list[2].add(1);
  list[2].add(3);
  list[2].add(6);
  list[3].add(2);
  list[3].add(4);
  list[4].add(3);
  list[4].add(5);
  list[4].add(6);
  list[5].add(0);
  list[5].add(4);
  list[5].add(6);
  list[6].add(1);
  list[6].add(2);
  list[6].add(4);
  list[6].add(5);
  //以每个数码管作为起点(即在该数码管必须亮情况下)
  for (int i = 0; i < 7; i++) {
    set.add(1<<i); //单独亮也符合情况,所以存储进去
    dfs(1, i, 1<<i); //深度优先搜索
  }
  System.out.println(set.size()); //因为唯一性,所以set中元素的个数即为符合条件的数码管亮灭状态的数量
  }
  //深度优先搜索,第一个参数代表当前亮了几个数码管,第二个参数代表当前最近亮起的数码管,第三个参数即为当前状态(如0000001代表0号数码管亮,其余不亮)
  static void dfs(int total, int cur, int state) {
  //最多亮起7个数码管
  if (total == 7) {
    return;
  }
  for (Integer item : list[cur]) {
    if (!set.contains(state | (1<<item))) {
    set.add(state | (1<<item));
    }
    dfs(total+1, item, state | (1<<item));
  }
  }
}



相关文章
|
算法 搜索推荐 Java
【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题
本文探讨了如何将算法学习与实际项目相结合,以提升编程竞赛中的解题能力。通过《苍穹外卖》项目,介绍了订单配送路径规划(基于动态规划解决旅行商问题)和商品推荐系统(基于贪心算法)。这些实例不仅展示了算法在实际业务中的应用,还帮助读者更好地准备蓝桥杯等编程竞赛。结合具体代码实现和解析,文章详细说明了如何运用算法优化项目功能,提高解决问题的能力。
785 6
|
算法 Java C++
【潜意识Java】蓝桥杯算法有关的动态规划求解背包问题
本文介绍了经典的0/1背包问题及其动态规划解法。
575 5
|
机器学习/深度学习 算法 关系型数据库
第十五届蓝桥杯C++B组省赛
第十五届蓝桥杯C++B组省赛
595 14
|
算法 C++
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
522 5
|
人工智能 Python
蓝桥杯练习题(四):Python组之历届试题三十题
关于蓝桥杯Python组历届试题的三十个练习题的总结,包括题目描述、输入输出格式、样例输入输出以及部分题目的解题思路和代码实现。
755 0
蓝桥杯练习题(四):Python组之历届试题三十题
|
Java
2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟
2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟
238 4
|
Java
2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
2023届蓝桥杯大赛软件类国赛Java大学B组 互质 数论
276 1
|
存储 前端开发 算法
2016届蓝桥杯大赛软件类国赛Java大学B组 反幻方 暴力搜索
2016届蓝桥杯大赛软件类国赛Java大学B组 反幻方 暴力搜索
251 0
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
314 0
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
265 0