Encuentre elementos usando segmentos mínimos en la pantalla de siete segmentos

Se puede usar una pantalla de siete segmentos para mostrar números. Dada una array de n números naturales. La tarea es encontrar el número en la array que usa segmentos mínimos para mostrar el número. Si varios números tienen un número mínimo de segmentos, genera el número que tiene el índice más pequeño.

Seven Segment Display

Ejemplos:  

Input : arr[] = { 1, 2, 3, 4, 5 }.
Output : 1
1 uses on 2 segments to display.

Input : arr[] = { 489, 206, 745, 123, 756 }.
Output : 745

Calcule previamente el número de segmentos utilizados por los dígitos del 0 al 9 y guárdelo. Ahora, para cada elemento de la array, sume el número de segmentos utilizados por cada dígito. Luego encuentre el elemento que está usando el número mínimo de segmentos.

The number of segment used by digit: 
0 -> 6 
1 -> 2 
2 -> 5 
3 -> 5 
4 -> 4 
5 -> 5 
6 -> 6 
7 -> 3 
8 -> 7 
9 -> 6

A continuación se muestra la implementación de este enfoque: 

C++

// C++ program to find minimum number of segments
// required
#include<bits/stdc++.h>
using namespace std;
 
// Precomputed values of segment used by digit 0 to 9.
const int seg[10] = { 6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
 
// Return the number of segments used by x.
int computeSegment(int x)
{
    if (x == 0)
        return seg[0];
 
    int count = 0;
 
    // Finding sum of the segment used by
    // each digit of a number.
    while (x)
    {
        count += seg[x%10];
        x /= 10;
    }
 
    return count;
}
 
int elementMinSegment(int arr[], int n)
{
    // Initialising the minimum segment and minimum
    // number index.
    int minseg = computeSegment(arr[0]);
    int minindex = 0;
 
    // Finding and comparing segment used
    // by each number arr[i].
    for (int i = 1; i < n; i++)
    {
        int temp = computeSegment(arr[i]);
 
        // If arr[i] used less segment then update
        // minimum segment and minimum number.
        if (temp < minseg)
        {
            minseg   = temp;
            minindex = i;
        }
    }
 
    return arr[minindex];
}
 
// Driven Program
int main()
{
    int arr[] = {489, 206, 745, 123, 756};
    int n = sizeof(arr)/sizeof(arr[0]);
    cout << elementMinSegment(arr, n) << endl;
    return 0;
}

Java

// Java program to find minimum
// number of segments required
import java.io.*;
 
class GFG {
     
// Precomputed values of segment
// used by digit 0 to 9.
static int []seg = { 6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
 
// Return the number of segments used by x.
static int computeSegment(int x)
{
    if (x == 0)
        return seg[0];
 
    int count = 0;
 
    // Finding sum of the segment used by
    // each digit of a number.
    while (x > 0)
    {
        count += seg[x % 10];
        x /= 10;
    }
 
    return count;
}
 
static int elementMinSegment(int []arr, int n)
{
    // Initialising the minimum segment
    // and minimum number index.
    int minseg = computeSegment(arr[0]);
    int minindex = 0;
 
    // Finding and comparing segment used
    // by each number arr[i].
    for (int i = 1; i < n; i++)
    {
        int temp = computeSegment(arr[i]);
 
        // If arr[i] used less segment then update
        // minimum segment and minimum number.
        if (temp < minseg)
        {
            minseg = temp;
            minindex = i;
        }
    }
 
    return arr[minindex];
}
 
    // Driver program
    static public void main (String[] args)
    {
       int []arr = {489, 206, 745, 123, 756};
       int n = arr.length;
       System.out.println(elementMinSegment(arr, n));
    }
}
 
//This code is contributed by vt_m.

Python3

# Python implementation of
# the above approach
 
# Precomputed values of segment
# used by digit 0 to 9.
seg = [6, 2, 5, 5, 4,
       5, 6, 3, 7, 6]
 
# Return the number of
# segments used by x.
def computeSegment(x):
    if(x == 0):
        return seg[0]
 
    count = 0
 
    # Finding sum of the segment
    # used by each digit of a number.
    while(x):
        count += seg[x % 10]
        x = x // 10
 
    return count
 
# function to return minimum sum index
def elementMinSegment(arr, n):
 
    # Initialising the minimum
    # segment and minimum number index.
    minseg = computeSegment(arr[0])
    minindex = 0
 
    # Finding and comparing segment
    # used by each number arr[i].
    for i in range(1, n):
        temp = computeSegment(arr[i])
 
        # If arr[i] used less segment
        # then update minimum segment
        # and minimum number.
        if(temp < minseg):
 
            minseg = temp
            minindex = i
 
    return arr[minindex]
 
# Driver Code
arr = [489, 206, 745, 123, 756]
n = len(arr)
 
# function print required answer
print(elementMinSegment(arr, n))
 
# This code is contributed by
# Sanjit_Prasad

C#

// C# program to find minimum
// number of segments required
using System;
 
class GFG{
     
// Precomputed values of segment
// used by digit 0 to 9.
static int []seg = new int[10]{ 6, 2, 5, 5, 4,
                               5, 6, 3, 7, 6};
 
// Return the number of segments used by x.
static int computeSegment(int x)
{
    if (x == 0)
        return seg[0];
 
    int count = 0;
 
    // Finding sum of the segment used by
    // each digit of a number.
    while (x > 0)
    {
        count += seg[x % 10];
        x /= 10;
    }
 
    return count;
}
 
static int elementMinSegment(int []arr, int n)
{
    // Initialising the minimum segment
    // and minimum number index.
    int minseg = computeSegment(arr[0]);
    int minindex = 0;
 
    // Finding and comparing segment used
    // by each number arr[i].
    for (int i = 1; i < n; i++)
    {
        int temp = computeSegment(arr[i]);
 
        // If arr[i] used less segment then update
        // minimum segment and minimum number.
        if (temp < minseg)
        {
            minseg = temp;
            minindex = i;
        }
    }
 
    return arr[minindex];
}
 
    // Driver program
    static public void Main()
    {
       int []arr = {489, 206, 745, 123, 756};
       int n = arr.Length;
       Console.WriteLine(elementMinSegment(arr, n));
    }
}
 
//This code is contributed by vt_m.

PHP

<?php
// PHP program to find minimum
// number of segments required
 
// Precomputed values of segment
// used by digit 0 to 9.
 
$seg = array(6, 2, 5, 5, 4,
             5, 6, 3, 7, 6);
 
// Return the number of
// segments used by x.
function computeSegment($x)
{
    global $seg;
    if ($x == 0)
        return $seg[0];
 
    $count = 0;
 
    // Finding sum of the segment
    // used by each digit of a number.
    while ($x)
    {
        $count += $seg[$x % 10];
        $x = (int)$x / 10;
    }
 
    return $count;
}
 
function elementMinSegment($arr, $n)
{
    // Initialising the minimum segment
    // and minimum number index.
    $minseg = computeSegment($arr[0]);
    $minindex = 0;
 
    // Finding and comparing segment
    // used by each number arr[i].
    for ($i = 1; $i < $n; $i++)
    {
        $temp = computeSegment($arr[$i]);
 
        // If arr[i] used less segment
        // then update minimum segment
        // and minimum number.
        if ($temp < $minseg)
        {
            $minseg = $temp;
            $minindex = $i;
        }
    }
 
    return $arr[$minindex];
}
 
// Driver Code
$arr = array (489, 206, 745, 123, 756);
$n = sizeof($arr);
echo elementMinSegment($arr, $n) ,"\n";
 
// This code is contributed by ajit
?>

Javascript

<script>
 
// Javascript program to find minimum
// number of segments required
 
// Precomputed values of segment
// used by digit 0 to 9.
let seg = [ 6, 2, 5, 5, 4, 5, 6, 3, 7, 6];
 
// Return the number of segments used by x.
function computeSegment(x)
{
    if (x == 0)
        return seg[0];
 
    let count = 0;
 
    // Finding sum of the segment used by
    // each digit of a number.
    while (x > 0)
    {
        count += seg[x % 10];
        x = parseInt(x / 10, 10);
    }
    return count;
}
 
function elementMinSegment(arr, n)
{
     
    // Initialising the minimum segment
    // and minimum number index.
    let minseg = computeSegment(arr[0]);
    let minindex = 0;
 
    // Finding and comparing segment used
    // by each number arr[i].
    for(let i = 1; i < n; i++)
    {
        let temp = computeSegment(arr[i]);
 
        // If arr[i] used less segment then update
        // minimum segment and minimum number.
        if (temp < minseg)
        {
            minseg = temp;
            minindex = i;
        }
    }
    return arr[minindex];
}
 
// Driver code
let arr = [ 489, 206, 745, 123, 756 ];
let n = arr.length;
 
document.write(elementMinSegment(arr, n));
 
// This code is contributed by divyesh072019
 
</script>
Producción

745

Complejidad de Tiempo: O(n * log 10 n)
Espacio Auxiliar: O(10)

Este artículo es una contribución de Anuj Chauhan . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *