logo

Minimalus segmentų skaičius septynių segmentų ekrane

Skaičiams rodyti galima naudoti septynių segmentų ekraną. Atsižvelgiant į masyvą n natūraliuosius skaičius. Užduotis yra rasti skaičių masyve, kuris naudoja mažiausią segmentų skaičių, kad būtų rodomas skaičius. Jei keli skaičiai turi minimalų segmentų skaičių, išvedamas skaičius, turintis mažiausią indeksą.

Septynių segmentų ekranas' title=

Pavyzdžiai:   



Įvestis: arr[] = { 1 2 3 4 5 }.
Išvestis: 1
Paaiškinimas: Elementas, kuriame naudojamas minimalus segmentų skaičius, yra 1 (t. y. 2 segmentai)

Įvestis: arr[] = { 489 206 745 123 756 }.
Išvestis: 745
Paaiškinimas: Elementas su mažiausiu indeksu, kuris naudoja minimalų segmentų skaičių, yra 745 (t. y. 12 segmentų)

Idėja yra iš anksto apskaičiuoti segmentų skaičių, naudojamą skaitmenimis nuo 0 iki 9, ir jį išsaugoti. Dabar kiekvienam masyvo elementui sumuokite segmento, kurį naudoja kiekvienas skaitmuo, skaičių. Tada suraskite elementą, kuris naudoja mažiausią segmentų skaičių.

Segmento skaičius, naudojamas skaitmenimis: 
0 -> 6 
1 -> 2 
2 -> 5 
3 -> 5 
4 -> 4 
5 -> 5 
6 -> 6 
7 -> 3 
8 -> 7 
9 -> 6

C++
#include   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(vector<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]; } int main() {  vector<int> arr = {489 206 745 123 756};  int n = arr.size();   cout << elementMinSegment(arr n) << endl;  return 0; } 
Java
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]; }  static public void main (String[] args)  {  int []arr = {489 206 745 123 756};  int n = arr.length;  System.out.println(elementMinSegment(arr n));  } } 
Python
# 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#
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]; }  static public void Main()  {  int []arr = {489 206 745 123 756};  int n = arr.Length;  Console.WriteLine(elementMinSegment(arr n));  } } 
JavaScript
// 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; console.log(elementMinSegment(arr n)); 

Išvestis
745

Laiko sudėtingumas: O(n * log 10 n)
Pagalbinė erdvė: O(10)

Sukurti viktoriną