数字数码管-解题思路及过程

来源:互联网 发布:公务员可以开淘宝店吗 编辑:程序博客网 时间:2024/05/18 01:15

一.题目描述:


数字或字母可以用7位数码管显示(就是排列为8字形的7个数码管)

       @@@@    ...       0
     @           @  ...    1   2
     @           @         

       @@@@    ...       3
     @           @  ...    4    5    
     @           @
       @@@@    ...       6


对于大型灯管,为了节约使用,在切换数字的时候,如果该灯管的状态没有改变,则不需要对该灯管关了再开。

已知一个数字变化的系列,求7个数码管开关的动作。
(1) 0,2,3,5,6
(2) 0,1,4,6,5,3


二.解题思路:

首先我们会想这9个数字在数码管上是如何显示的,然后会想要这9个数字之间是如何过渡的,可能是两个相邻数字之间的变化,也可能是不同数字之间的变化,如何才能够解决这个过渡的问题就是我们应该好好思考的。


我们知道将数码管开启的时候是所有的灯都先亮一下(即亮出8这个数字),然后才会变化到我们想要的数字的。而如何进行变化呢?我们就会想到如果想从一个数字变换到另一个数字,先要做的就是将该灭的灯先灭掉(即将对应显示的数字所不需要亮的灯给灭了,比如数字3,我们需要灭的登就是上图所对应的1号和4号位置),如果该灯本来就是灭的我们就不做任何操作,如果该灯是亮的则灭了他;然后要做的就是亮起我们需要亮的灯,道理同上面一样。


三.Java代码如下:

public class Test06 {public static void main(String[] args) {// String value = "02356";    //需要变换的数码管的数字序列String value = "0146538";int[][] light = init();//初始化各数字所对应的需要灭的灯String[] result = new String[value.length()];//存放每个是自所对应的亮灭灯情况int[] tmp = new int[7];//存放每个数字所对应的亮灭灯状态:0为灯亮、1则为灯灭int[] tmp2 = new int[7];//存放每个数字灭了的灯号int n;//计数tmp2中存入的个数// 假设初始时全亮for (int i = 0; i < value.length(); i++) {int t = value.charAt(i) - '0';//取得一个数字result[i] = "";//初始化该数字对应变换的结果值n = 0;for (int j = 0; j < light[t].length; j++) {//该数字所对应的需要灭的灯的数量,循环灭了int m = tmp[light[t][j]];//该等对应的亮灯状态,为0则灭了,否则不变,但是都需要将其灯号将如tmp2记录if (m == 0) {result[i] += "灭" + light[t][j];tmp[light[t][j]] = 1;}tmp2[n++] = light[t][j];}for (int k = 0; k < tmp.length; k++) {//循环亮起该数字需要亮的等,即状态为1的则亮起,但是前面刚灭的不需要亮if (tmp[k] == 1) {int l;for (l = 0; l < n; l++) {if (tmp2[l] == k) {break;}}if (l == n) {result[i] += "亮" + k;tmp[k] = 0;}}}}for (int i = 0; i < result.length; i++) {//循环输出每个数字所对应的灯管变化的情况if (result[i].equals(""))System.out.println("不变");elseSystem.out.println(result[i]);}}static int[][] init() {//初始化每个数字所对应需要灭的灯放入一个二维数组中int[][] light = new int[10][];light[0] = new int[1];light[0][0] = 3;light[1] = new int[5];light[1][0] = 0;light[1][1] = 1;light[1][2] = 3;light[1][3] = 4;light[1][4] = 6;light[2] = new int[2];light[2][0] = 1;light[2][1] = 5;light[3] = new int[2];light[3][0] = 1;light[3][1] = 4;light[4] = new int[3];light[4][0] = 0;light[4][1] = 4;light[4][2] = 6;light[5] = new int[2];light[5][0] = 2;light[5][1] = 4;light[6] = new int[1];light[6][0] = 2;light[7] = new int[4];light[7][0] = 1;light[7][1] = 3;light[7][2] = 4;light[7][3] = 6;light[8] = new int[0];light[9] = new int[2];light[9][0] = 4;light[9][1] = 6;return light;}}

结果如下:


至此,该题目就结束了,以上为个人思路,仅供参考,有什么不到位的地方欢迎批评指正,谢谢......

0 0
原创粉丝点击