Java 中的七段显示问题

2025年3月17日 | 阅读 7 分钟

七段显示器是一种输出显示设备。它提供了一种以图像、文本或十进制数字形式显示信息的方式。它是复杂点阵显示器的替代品。七段显示器广泛应用于计算器、手表、游戏机、电子仪表等数字或电子设备中。在本节中,我们将讨论如何在 Java 中以七段显示器表示数字。

Seven Segment Display Problem in Java

什么是七段显示器?

它是一种显示设备,通过使用七个 LED 段(水平和垂直条)来形成数字,看起来像数字 8。这些七个段可以形成从 0 到 9 的任何数字。例如,请看下图。

七段显示器的工作原理

下表描述了数字和对应的段代码,其中 0 表示无电源,1 表示有电源。

数字段数
显示数字
七段代码
abCdefg
061111110
120110000
251101101
351111001
440110011
551011011
661011111
731110000
871111111
961110011

我们观察到表示一个数字所需的最小段数为 2。

Seven Segment Display Problem in Java

在继续解决方案之前,我们首先将看到显示七段数字的 Java 程序。

在 Java 中以七段形式表示数字的程序

有两种方法可以以七段形式打印数字

  • 使用 switch-case
  • 使用十六进制编码

使用 switch-case

这是以七段显示器形式打印数字的简单方法。在以下 Java 程序中,我们从用户读取一个数字并切换到相应的 case,该 case 将数字打印为七段显示器。

DisplaySevenSegment.java

输出 1

Seven Segment Display Problem in Java

输出 1

Seven Segment Display Problem in Java

让我们看看另一种在七段显示器中打印数字的方法。

使用十六进制编码

在以下 Java 程序中,我们使用十六进制编码来以七段形式表示数字。下表描述了相同的内容。在表中,on 表示 1,off 表示 0。

Seven Segment Display Problem in Java

让我们在 Java 程序中实现上述逻辑。

DisplayDigitSevenSegment.java

输出

Seven Segment Display Problem in Java

问题陈述

该问题分为以下两个子问题。

  • 在第一个子问题中,我们将计算显示数字所需的最小段数。
  • 在第二个子问题中,我们将找到使用最小段数来显示数字的元素。

让我们逐一讨论子问题。

子问题 1

我们给定一个 N 位数字,我们必须找到显示每个数字所需的最小段数。将所有段加起来并返回显示 N 位数字的总段数。

示例

假设,N=6(数字位数)且 s="234567"。

表示数字 2 所需的最小段数为 5。

表示数字 3 所需的最小段数为 5。

表示数字 4 所需的最小段数为 4。

表示数字 5 所需的最小段数为 5。

表示数字 6 所需的最小段数为 6。

表示数字 7 所需的最小段数为 3。

因此,我们所需的总段数为 28 (5 + 5 + 4 + 5 + 6 + 3)。

让我们在 Java 程序中实现上述方法。

SegmentSum.java

输出

Seven Segment Display Problem in Java

子问题 2

在这个问题中,我们给定一个自然数数组。任务是找出哪个自然数使用最少段数来显示该数字。可能存在多个自然数具有最少段数的情况,在这种情况下,输出将是索引最小的数字。

例如,考虑以下数组。

arr[] = {22, 46, 88, 12, 67, 90, 23, 55, 61}

22 -> 5+5 = 10

46 -> 4+6 = 10

88 -> 7+7 = 14

12 -> 2+5 = 7

67 -> 6+3 = 9

90 -> 6+6 = 12

23 -> 5+5 = 10

55 -> 5+5 = 10

61 -> 5+5 = 8

我们观察到数字 12 使用最少的段数来显示该数字。因此,输出将是 12

在七段显示器中查找使用最少段数的元素的 Java 程序

在以下 Java 程序中,我们存储了每个数字的段数。之后,我们定义了两个函数,一个计算数字的段数,第二个函数计算整个数字的最小段数。之后,我们将每个数字的段数相互比较,并返回使用最少段数的数字。

让我们看看相应的 Java 程序。

SevenSegment.java

输出

12

复杂度

上述方法的时间复杂度为 O(n * log10n),空间复杂度为 O(1)。