📜  使用 N 段可在七段显示器上显示的最大数量

📅  最后修改于: 2021-10-26 06:47:43             🧑  作者: Mango

给定一个正整数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 现场工作专业课程学生竞争性编程现场课程