给定一个正整数N 。任务是使用 N 段找到可以在七段显示器上显示的最大数量。
七段显示器:七段显示器 (SSD) 或七段指示器是一种用于显示十进制数字的电子显示设备形式,可替代更复杂的点阵显示器。
例子:
Input : N = 5
Output : 71
On 7-segment display, 71 will look like:
_
| |
| |
Input : N = 4
Output : 11
请注意,位数比其他数字多的数字将具有更大的价值。因此,我们将尝试使用给定的“N”段创建一个具有最大可能长度(位数)的数字。
另请注意,为了增加数字的长度,我们将尝试在每个数字上使用尽可能少的段。因此,数字“1”仅使用 2 个段来表示一个数字。没有其他数字使用少于 2 个段。
因此,如果 N 是偶数,答案将是 1s N/2 次。
在 N 为奇数的情况下,如果我们制作 1s N/2 次,我们将无法使用所有段。此外,如果我们使用 3 个段来制作一个 7 和 (N-3)/2 个 1 的数字,那么形成的数字的值将大于由 N/2 个 1 形成的数字。
下面是这个方法的实现:
C++
#include
using namespace std;
// Function to print maximum number that can be formed
// using N segments
void printMaxNumber(int n)
{
// If n is odd
if (n & 1) {
// use 3 three segment to print 7
cout << "7";
// remaining to print 1
for (int i = 0; i < (n - 3) / 2; i++)
cout << "1";
}
// If n is even
else {
// print n/2 1s.
for (int i = 0; i < n / 2; i++)
cout << "1";
}
}
// Driver's Code
int main()
{
int n = 5;
printMaxNumber(n);
return 0;
}
Java
// Java implementation of above approach
class GFG {
// Function to print maximum number that
// can be formed using N segments
public static void printMaxNumber(int n)
{
// If n is odd
if (n % 2 != 0) {
// use 3 three segment to print 7
System.out.print("7");
// remaining to print 1
for (int i = 0; i < (n - 3) / 2; i++)
System.out.print("1");
}
// If n is even
else {
// print n/2 1s.
for (int i = 0; i < n / 2; i++)
System.out.print("1");
}
}
// Driver Code
public static void main(String[] args)
{
int n = 5;
printMaxNumber(n);
}
}
// This code is contributed by princiraj1992
Python3
# Function to print maximum number that can be formed
# using N segments
def printMaxNumber(n):
# If n is odd
if (n % 2 == 1):
# use 3 three segment to print 7
print("7",end="");
# remaining to print 1
for i in range(int((n - 3) / 2)):
print("1",end="");
# If n is even
else:
# print n/2 1s.
for i in range(n/2):
print("1",end="");
# Driver's Code
n = 5;
printMaxNumber(n);
# This code contributed by Rajput-Ji
C#
// C# implementation of above approach
using System;
class GFG
{
// Function to print maximum number that
// can be formed using N segments
public static void printMaxNumber(int n)
{
// If n is odd
if (n % 2 != 0)
{
// use 3 three segment to print 7
Console.Write("7");
// remaining to print 1
for (int i = 0; i < (n - 3) / 2; i++)
Console.Write("1");
}
// If n is even
else
{
// print n/2 1s.
for (int i = 0; i < n / 2; i++)
Console.Write("1");
}
}
// Driver Code
public static void Main(String[] args)
{
int n = 5;
printMaxNumber(n);
}
}
// This code has been contributed by 29AjayKumar
PHP
Javascript
输出:
71
时间复杂度: O(n)
辅助空间: O(1)
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。