Atrodiet lielāko skaitu ar norādīto ciparu skaitu un ciparu summu

Atrodiet lielāko skaitu ar norādīto ciparu skaitu un ciparu summu
Izmēģiniet to GFG praksē Atrodiet lielāko skaitu ar norādīto ciparu skaitu un ciparu summu #practicelinkdiv {displejs: nav! Svarīgs; }

Dots vesels skaitlis s un s Uzdevums ir atrast lielāko skaitli ar doto ciparu summu s un ciparu skaits s Apvidū

Piemēri:  

Ievade: S = 9 d = 2
Izlaide: 90

Ievade: S = 20 d = 3
Izlaide: 992

Ieteicamā prakse Lielākais iespējamais skaits Izmēģiniet!

Naivā pieeja:

Apsveriet visu m ciparu numuri un saglabājiet a maksimums mainīgais, lai saglabātu maksimālo skaitli ar m cipari un ciparu summa kā s Apvidū 

Laika sarežģītība: O (10 m ).
Papildu telpa: O (1)

Atrodiet lielāko skaitu ar norādīto ciparu skaitu un ciparu summu Alkatīga pieeja  

Zemāk ir ideja atrisināt problēmu:

Ideja ir viena pa vienai, aizpildiet visus ciparus no kreisās puses līdz labajai daļai, salīdzinot atlikušā summa ar 9, ja atlikušā summa ir lielāka vai vienāda ar 9 9 pašreizējā pozīcijā, citā vietā ieliek atlikušo summu. Tā kā cipari ir aizpildīti no kreisās uz labo pusi, lielākie cipari tiks novietoti kreisajā pusē, tādējādi iegūstiet lielāko skaitli  un Apvidū

Ilustrācija: 

Veiciet zemāk esošās darbības, lai ieviestu ideju:

  • Ja S ir nulle 
    • Ja m = 1 izdrukāt 0
    • Citādi šāds skaitlis nav iespējams.
  • Ja S> 9*m, tad šāds skaitlis nav iespējams.
  • Palaist a cilpai no 0 līdz m-1
    • Ja s> = 9 atņemiet 9 no S un izdrukājiet 9.
    • Else drukāt s un iestatīt s uz 0 Apvidū

Zemāk ir iepriekš minētās pieejas ieviešana:

C++
   // C++ program to find the largest number that can be   // formed from given sum of digits and number of digits.   #include          using     namespace     std  ;   // Prints the smallest possible number with digit sum 's'   // and 'm' number of digits.   void     findLargest  (  int     m       int     s  )   {      // If sum of digits is 0 then a number is possible      // only if number of digits is 1.      if     (  s     ==     0  )     {      (  m     ==     1  )     ?     cout      < <     'Largest number is '      < <     0      :     cout      < <     'Not possible'  ;      return  ;      }      // Sum greater than the maximum possible sum.      if     (  s     >     9     *     m  )     {      cout      < <     'Not possible'  ;      return  ;      }      // Create an array to store digits of result      int     res  [  m  ];      // Fill from most significant digit to least      // significant digit.      for     (  int     i     =     0  ;     i      <     m  ;     i  ++  )     {      // Fill 9 first to make the number largest      if     (  s     >=     9  )     {      res  [  i  ]     =     9  ;      s     -=     9  ;      }      // If remaining sum becomes less than 9 then      // fill the remaining sum      else     {      res  [  i  ]     =     s  ;      s     =     0  ;      }      }      cout      < <     'Largest number is '  ;      for     (  int     i     =     0  ;     i      <     m  ;     i  ++  )      cout      < <     res  [  i  ];   }   // Driver code   int     main  ()   {      int     s     =     9       m     =     2  ;      findLargest  (  m       s  );      return     0  ;   }   
C
   // C program to find the largest number that can be   // formed from given sum of digits and number of digits.   #include         // Prints the smallest possible number with digit sum 's'   // and 'm' number of digits.   void     findLargest  (  int     m       int     s  )   {      // If sum of digits is 0 then a number is possible      // only if number of digits is 1.      if     (  s     ==     0  )     {      (  m     ==     1  )     ?     printf  (  'Largest number is 0'  )      :     printf  (  'Not possible'  );      return  ;      }      // Sum greater than the maximum possible sum.      if     (  s     >     9     *     m  )     {      printf  (  'Not possible'  );      return  ;      }      // Create an array to store digits of result      int     res  [  m  ];      // Fill from most significant digit to least      // significant digit.      for     (  int     i     =     0  ;     i      <     m  ;     i  ++  )     {      // Fill 9 first to make the number largest      if     (  s     >=     9  )     {      res  [  i  ]     =     9  ;      s     -=     9  ;      }      // If remaining sum becomes less than 9 then      // fill the remaining sum      else     {      res  [  i  ]     =     s  ;      s     =     0  ;      }      }      printf  (  'Largest number is '  );      for     (  int     i     =     0  ;     i      <     m  ;     i  ++  )      printf  (  '%d'       res  [  i  ]);   }   // Driver code   int     main  ()   {      int     s     =     9       m     =     2  ;      findLargest  (  m       s  );      return     0  ;   }   // This code is contributed by Sania Kumari Gupta   
Java
   // Java program to find the largest number that can be   // formed from given sum of digits and number of digits   class   GFG      {      // Function to print the largest possible number with digit sum 's'      // and 'm' number of digits      static     void     findLargest  (  int     m       int     s  )      {      // If sum of digits is 0 then a number is possible      // only if number of digits is 1      if     (  s     ==     0  )      {      System  .  out  .  print  (  m     ==     1     ?     'Largest number is 0'     :     'Not possible'  );             return     ;      }          // Sum greater than the maximum possible sum      if     (  s     >     9  *  m  )      {      System  .  out  .  println  (  'Not possible'  );      return     ;      }          // Create an array to store digits of result      int  []     res     =     new     int  [  m  ]  ;          // Fill from most significant digit to least      // significant digit      for     (  int     i  =  0  ;     i   <  m  ;     i  ++  )      {      // Fill 9 first to make the number largest      if     (  s     >=     9  )      {      res  [  i  ]     =     9  ;      s     -=     9  ;      }          // If remaining sum becomes less than 9 then      // fill the remaining sum      else      {      res  [  i  ]     =     s  ;      s     =     0  ;      }      }          System  .  out  .  print  (  'Largest number is '  );      for     (  int     i  =  0  ;     i   <  m  ;     i  ++  )      System  .  out  .  print  (  res  [  i  ]  );      }          // driver program      public     static     void     main     (  String  []     args  )         {      int     s     =     9       m     =     2  ;      findLargest  (  m       s  );      }   }   // Contributed by Pramod Kumar   
Python3
   # Python 3 program to find   # the largest number that    # can be formed from given   # sum of digits and number   # of digits.   # Prints the smallest    # possible number with digit    # sum 's' and 'm' number of   # digits.   def   findLargest  (   m     s  )   :   # If sum of digits is 0   # then a number is possible   # only if number of digits   # is 1.   if   (  s   ==   0  )   :   if  (  m   ==   1  )   :   print  (  'Largest number is '      '0'    end   =   ''  )   else   :   print  (  'Not possible'    end   =   ''  )   return   # Sum greater than the    # maximum possible sum.   if   (  s   >   9   *   m  )   :   print  (  'Not possible'    end   =   ''  )   return   # Create an array to    # store digits of   # result   res   =   [  0  ]   *   m   # Fill from most significant   # digit to least significant   # digit.   for   i   in   range  (  0     m  )   :   # Fill 9 first to make   # the number largest   if   (  s   >=   9  )   :   res  [  i  ]   =   9   s   =   s   -   9   # If remaining sum    # becomes less than    # 9 then fill the    # remaining sum   else   :   res  [  i  ]   =   s   s   =   0   print  (   'Largest number is '    end   =   ''  )   for   i   in   range  (  0     m  )   :   print  (  res  [  i  ]  end   =   ''  )   # Driver code   s   =   9   m   =   2   findLargest  (  m     s  )   # This code is contributed by Nikita Tiwari.   
C#
   // C# program to find the    // largest number that can    // be formed from given sum    // of digits and number of digits   using     System  ;   class     GFG   {          // Function to print the       // largest possible number       // with digit sum 's' and       // 'm' number of digits      static     void     findLargest  (  int     m       int     s  )      {      // If sum of digits is 0       // then a number is possible       // only if number of digits is 1      if     (  s     ==     0  )      {      Console  .  Write  (  m     ==     1     ?         'Largest number is 0'     :         'Not possible'  );             return     ;      }      // Sum greater than the      // maximum possible sum      if     (  s     >     9     *     m  )      {      Console  .  WriteLine  (  'Not possible'  );      return     ;      }      // Create an array to       // store digits of result      int     []  res     =     new     int  [  m  ];      // Fill from most significant       // digit to least significant digit      for     (  int     i     =     0  ;     i      <     m  ;     i  ++  )      {      // Fill 9 first to make      // the number largest      if     (  s     >=     9  )      {      res  [  i  ]     =     9  ;      s     -=     9  ;      }      // If remaining sum becomes       // less than 9 then      // fill the remaining sum      else      {      res  [  i  ]     =     s  ;      s     =     0  ;      }      }      Console  .  Write  (  'Largest number is '  );      for     (  int     i     =     0  ;     i      <     m  ;     i  ++  )      Console  .  Write  (  res  [  i  ]);      }          // Driver Code      static     public     void     Main     ()      {      int     s     =     9       m     =     2  ;      findLargest  (  m       s  );      }   }   // This code is Contributed by ajit   
PHP
      // PHP program to find the largest    // number that can be formed from    // given sum of digits and number    // of digits.   // Prints the smallest possible    // number with digit sum 's'    // and 'm' number of digits.   function   findLargest  (  $m     $s  )   {   // If sum of digits is 0 then    // a number is possible only if   // number of digits is 1.   if   (  $s   ==   0  )   {   if  ((  $m   ==   1  )   ==   true  )   echo   'Largest number is '      0  ;   else   echo   'Not possible'  ;   return   ;   }   // Sum greater than the   // maximum possible sum.   if   (  $s   >   9   *   $m  )   {   echo   'Not possible'  ;   return   ;   }   // Create an array to store    // digits of result Fill from    // most significant digit to    // least significant digit.   for   (  $i   =   0  ;   $i    <   $m  ;   $i  ++  )   {   // Fill 9 first to make   // the number largest   if   (  $s   >=   9  )   {   $res  [  $i  ]   =   9  ;   $s   -=   9  ;   }   // If remaining sum becomes    // less than 9 then fill    // the remaining sum   else   {   $res  [  $i  ]   =   $s  ;   $s   =   0  ;   }   }   echo   'Largest number is '  ;   for   (  $i   =   0  ;   $i    <   $m  ;   $i  ++  )   echo   $res  [  $i  ];   }   // Driver code   $s   =   9  ;   $m   =   2  ;   findLargest  (  $m     $s  );   // This code is contributed by m_kit    ?>   
JavaScript
    <  script  >   // Javascript program to find the largest number that can be   // formed from given sum of digits and number of digits.   // Prints the smallest possible number with digit sum 's'   // and 'm' number of digits.   function     findLargest  (  m       s  )   {      // If sum of digits is 0 then a number is possible      // only if number of digits is 1.      if     (  s     ==     0  )      {      (  m     ==     1  )  ?     document  .  write  (  'Largest number is '     +     0  )      :     document  .  write  (  'Not possible'  );      return     ;      }      // Sum greater than the maximum possible sum.      if     (  s     >     9  *  m  )      {      document  .  write  (  'Not possible'  );      return     ;      }      // Create an array to store digits of result      let     res     =     new     Array  (  m  );      // Fill from most significant digit to least      // significant digit.      for     (  let     i  =  0  ;     i   <  m  ;     i  ++  )      {      // Fill 9 first to make the number largest      if     (  s     >=     9  )      {      res  [  i  ]     =     9  ;      s     -=     9  ;      }      // If remaining sum becomes less than 9 then      // fill the remaining sum      else      {      res  [  i  ]     =     s  ;      s     =     0  ;      }      }      document  .  write  (  'Largest number is '  );      for     (  let     i  =  0  ;     i   <  m  ;     i  ++  )      document  .  write  (  res  [  i  ]);   }   // Driver code      let     s     =     9       m     =     2  ;      findLargest  (  m       s  );   // This code is contributed by Mayank Tyagi    <  /script>   

Izvade
Largest number is 90 

Laika sarežģītība no šī šķīduma ir O (m).
Papildu telpa: O (m), kur m ir dotais vesels skaitlis.

Pieeja: mantkārīgs algoritms

  • Izveidojiet tukšu virkni, lai saglabātu rezultātu
  • Ja D ir 1 pievienojums rezultātam un atgrieziet to
  • Cilpa no kreisās daļas cipara uz labo ciparu
    a. Ja atlikušā ciparu summa ir lielāka vai vienāda ar 9. pievieno 9. rezultātam un atņemiet 9 no atlikušās ciparu summas
    b. Ja atlikušā ciparu summa ir mazāka par 9, pievienojiet rezultātam atlikušo ciparu summu un aizpildiet atlikušos ciparus ar 0
  • Atgriezt rezultātu
C++
   #include          #include         using     namespace     std  ;   int     largest_number  (  int     s       int     d  )     {      if     (  s     ==     0  )     {      return     0  ;      }      if     (  s     >     9     *     d  )     {      return     -1  ;      }      string     result     =     ''  ;      for     (  int     i     =     0  ;     i      <     d  ;     i  ++  )     {      if     (  s     >=     9  )     {      result     +=     '9'  ;      s     -=     9  ;      }     else     {      result     +=     to_string  (  s  );      s     =     0  ;      }      if     (  s     ==     0     &&     i      <     d  -1  )     {      result     +=     string  (  d  -  i  -1       '0'  );      break  ;      }      }      return     stoi  (  result  );   }   int     main  ()     {      // Test case 1      cout      < <     largest_number  (  9       2  )      < <     endl  ;     // Output: 90      // Test case 2      cout      < <     largest_number  (  20       3  )      < <     endl  ;     // Output: 992      return     0  ;   }   
Java
   import     java.util.*  ;   public     class   Main     {      public     static     int     largest_number  (  int     s       int     d  )      {      // If s is 0 then the largest number is 0.      if     (  s     ==     0  )     {      return     0  ;      }      // If s is greater than 9 times d then it is      // impossible to form a d-digit number whose sum of      // digits is s.      if     (  s     >     9     *     d  )     {      return     -  1  ;      }      // Initialize an empty string to store the result.      String     result     =     ''  ;      // Loop through each digit of the number.      for     (  int     i     =     0  ;     i      <     d  ;     i  ++  )     {      // If s is greater than or equal to 9 then add      // 9 to the result and subtract 9 from s.      if     (  s     >=     9  )     {      result     +=     '9'  ;      s     -=     9  ;      }      // Otherwise add s to the result and set s to      // 0.      else     {      result     +=     Integer  .  toString  (  s  );      s     =     0  ;      }      // If s is 0 and there are still digits left to      // fill then fill the remaining digits with 0s      // and break out of the loop.      if     (  s     ==     0     &&     i      <     d     -     1  )     {      result     +=     String  .  join  (      ''        Collections  .  nCopies  (  d     -     i     -     1       '0'  ));      break  ;      }      }      // Convert the result to an integer and return it.      return     Integer  .  parseInt  (  result  );      }      public     static     void     main  (  String  []     args  )      {      // Test case 1      System  .  out  .  println  (      largest_number  (  9       2  ));     // Output: 90      // Test case 2      System  .  out  .  println  (      largest_number  (  20       3  ));     // Output: 992      }   }   
Python3
   def   largest_number  (  s     d  ):   if   s   ==   0  :   return   0   if   s   >   9   *   d  :   return   -  1   result   =   ''   for   i   in   range  (  d  ):   if   s   >=   9  :   result   +=   '9'   s   -=   9   else  :   result   +=   str  (  s  )   s   =   0   if   s   ==   0   and   i    <   d  -  1  :   result   +=   '0'   *   (  d  -  i  -  1  )   break   return   int  (  result  )   # Test case 1   print  (  largest_number  (  9     2  ))   # Output: 90   # Test case 2   print  (  largest_number  (  20     3  ))   # Output: 992   
C#
   using     System  ;   class     Program     {      static     int     LargestNumber  (  int     s       int     d  )     {      if     (  s     ==     0  )     {      return     0  ;      }      if     (  s     >     9     *     d  )     {      return     -  1  ;      }      string     result     =     ''  ;      for     (  int     i     =     0  ;     i      <     d  ;     i  ++  )     {      if     (  s     >=     9  )     {      result     +=     '9'  ;      s     -=     9  ;      }     else     {      result     +=     s  .  ToString  ();      s     =     0  ;      }      if     (  s     ==     0     &&     i      <     d     -     1  )     {      result     +=     new     string  (  '0'       d     -     i     -     1  );      break  ;      }      }      return     int  .  Parse  (  result  );      }      static     void     Main  (  string  []     args  )     {      // Test case 1      Console  .  WriteLine  (  LargestNumber  (  9       2  ));     // Output: 90      // Test case 2      Console  .  WriteLine  (  LargestNumber  (  20       3  ));     // Output: 992      }   }   
JavaScript
   function     largestNumber  (  s       d  )     {   if     (  s     ==     0  )     {   return     0  ;   }   if     (  s     >     9     *     d  )     {   return     -  1  ;   }   let     result     =     ''  ;   for     (  let     i     =     0  ;     i      <     d  ;     i  ++  )     {   if     (  s     >=     9  )     {   result     +=     '9'  ;   s     -=     9  ;   }     else     {   result     +=     s  .  toString  ();   s     =     0  ;   }   if     (  s     ==     0     &&     i      <     d     -     1  )     {   result     +=     '0'  .  repeat  (  d     -     i     -     1  );   break  ;   }   }   return     parseInt  (  result  );   }   // Test cases   console  .  log  (  largestNumber  (  9       2  ));     // Output: 90   console  .  log  (  largestNumber  (  20       3  ));     // Output: 992   

Izvade
90 992 

Laika sarežģītība: O (d)
Papildu telpa: O (d)