Minsta segment i visning av sju segment

Minsta segment i visning av sju segment

En display med sju segment kan användas för att visa siffror. Med tanke på en mängd n naturliga tal. Uppgiften är att hitta numret i arrayen som använder det minsta antalet segment för att visa numret. Om flera tal har ett minsta antal segment matas ut det nummer som har det minsta indexet.

Display med sju segment

Exempel:   

Ingång: arr[] = { 1 2 3 4 5 }.
Utgång: 1
Förklaring: Elementet som använder det minsta antalet segment är 1 (dvs. 2 segment)

Ingång: arr[] = { 489 206 745 123 756 }.
Utgång: 745
Förklaring: Elementet med minsta index som använder det minsta antalet segment är 745 (dvs. 12 segment)

Tanken är att förberäkna antalet segment som används av siffror från 0 till 9 och lagra det. Summa nu antalet segment som används av varje siffra för varje element i matrisen. Hitta sedan det element som använder det minsta antalet segment.

Antalet segment som används per siffra: 
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  ));   

Produktion
745 

Tidskomplexitet: O(n * log 10 n)
Hjälputrymme: O(10)

Skapa frågesport