数字数码管
数字或字母可以用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("");
}
}
}