算法基础_数字数码管

数字数码管

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

@@@@          0
     @           @       1   2
     @           @         3
       @@@@         4   5
     @           @         6
     @           @
       @@@@

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

已知一个数字变化的系列,求7个数码管开关的动作。

3:0,2,3,5,6

6:0,1,4,6,5,3

算法思想:先观察显示每个数字的时候,都需要哪段数码管亮起;再依次列出需要每一段数码管亮起时可现实的数字,比如需要0段亮的时候,有0,2,3,5,6,7,8,9这些数。对于数字序列中的每一个数字,依次判断每个数码管是否需要亮起,如果需要,加入list同时判断上一个显示的数字的该段有没有亮起,若有,则没有动作,若没有,则开启这段;如果不需要同时判断上一个显示的数字的该段有没有亮起,若有,则关闭这段,若没有,则无动作。上一个现实的数字的开启关闭状态保存在list1中。每次循环结束,把list的状态给list1;每次循环开始,清空list.

import java.util.List;
import java.util.ArrayList;

public class Datagroup {


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
/* 0:   0,1,2,4,5,6
  1: 1,4
  2: 0,2,3,4,6
  3: 0,2,3,5,6
  4: 1,2,3,5
  5: 0,1,3,5,6
  6: 0,1,3,4,5,6
  7: 0,2,5
  8: 0,1,2,3,4,5,6
  9: 0,1,2,3,5,6
*/

  /*需要0段亮的时候,有0,2,3,5,6,7,8,9
 需要1段亮的时候,有 0,1,4,5,6,8,9,
 需要2段亮的时候,有0,2,3,4,7,8,9
 需要3段亮的时候,有2,3,4,5,6,8,9
 需要4段亮的时候 ,有0,1,2,6,8
 需要5段亮的时候,有0,3,4,5,6,7,8,9
需要6段亮的时候,有0,2,3,5,6,8,9       
*/
int[] a = {0,3,3,6,8,2,1,9,7,4};//要处理的数字序列
List<String> list = new ArrayList<String>();
List<String> list1 = new ArrayList<String>();

for(int i=0;i<a.length;i++){
System.out.print(a[i]+": ");

//需要0段亮起
if(a[i]==0 || a[i]==2 || a[i]==3 || a[i]==5 || a[i]==6 || a[i]==7 || a[i]==8 || a[i]==9){
list.add("0");
if(!list1.contains("0")){
System.out.print("开0 ");
}
}else{
if(list1.contains("0")){
System.out.print("关0 ");
}
}

//需要1段亮起
if(a[i]==0 || a[i]==1 || a[i]==4 || a[i]==5 || a[i]==6 || a[i]==8 || a[i]==9){
list.add("1");
if(!list1.contains("1")){
System.out.print("开1 ");
}
}else{
if(list1.contains("1")){
System.out.print("关1 ");
}
}

//需要2段亮起
if(a[i]==0 || a[i]==2 || a[i]==3 || a[i]==4 || a[i]==7 || a[i]==8 || a[i]==9){
list.add("2");
if(!list1.contains("2")){
System.out.print("开2 ");
}
}else{
if(list1.contains("2")){
System.out.print("关2 ");
}
}

//需要3段亮起
if(a[i]==2 || a[i]==3 || a[i]==4 || a[i]==5 || a[i]==6 || a[i]==8 || a[i]==9){
list.add("3");
if(!list1.contains("3")){
System.out.print("开3 ");
}
}else{
if(list1.contains("3")){
System.out.print("关3 ");
}
}

//需要4段亮起
if(a[i]==0 || a[i]==1 || a[i]==2 || a[i]==6 || a[i]==8){
list.add("4");
if(!list1.contains("4")){
System.out.print("开4 ");
}
}else{
if(list1.contains("4")){
System.out.print("关4 ");
}
}

//需要5段亮起
if(a[i]==0 || a[i]==3 || a[i]==4 || a[i]==5 || a[i]==6 || a[i]==7 || a[i]==8 || a[i]==9){
list.add("5");
if(!list1.contains("5")){
System.out.print("开5 ");
}
}else{
if(list1.contains("5")){
System.out.print("关5 ");
}
}

//需要6段亮起
if(a[i]==0 || a[i]==2 || a[i]==3 || a[i]==5 || a[i]==6 || a[i]==8 || a[i]==9){
list.add("6");
if(!list1.contains("6")){
System.out.print("开6 ");
}
}else{
if(list1.contains("6")){
System.out.print("关6 ");
}
}

list1.clear();
list1.addAll(list);
list.clear();
System.out.println("");
} 
}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值