1582 - Max Min

From Bitnami MediaWiki

sursa: [1]

Cerinţa[edit | edit source]

Se citesc de la tastatură n numere naturale. Să se determine numărul a cărui sumă a cifrelor este cea mai mare, respectiv cea mai mică.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.

Date de ieşire[edit | edit source]

Minimul va fi afișat pe primul rând și maximul pe al doilea rând.

Restricții și precizări[edit | edit source]

  • 1 ≤ n ≤ 1000
  • cele n numere citite sunt mai mici decât 2.000.000.000
  • dacă există mai multe numere cu aceeași sumă minimă/maximă se va afișa primul găsit

Exemplu[edit | edit source]

Intrare
5
145
225
198
326
874
Ieșire
225
874

Explicație[edit | edit source]

145 -> 1+4+5=10 225 -> 2+2+5=9 (minimul) 198 -> 1+9+8=18 326 -> 3+2+6=11 874 -> 8+7+4=19 (maximul)

Rezolvare[edit | edit source]

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line>

def citeste_numar_natural(mesaj):

   while True:
       try:
           nr = int(input(mesaj))
           if nr <= 0:
               raise ValueError("Introduceți un număr natural nenul.")
           return nr
       except ValueError as e:
           print(f"Eroare: {e}")

def citeste_numar_natural_pozitiv(mesaj):

   while True:
       try:
           nr = int(input(mesaj))
           if nr < 0:
               raise ValueError("Introduceți un număr natural pozitiv.")
           return nr
       except ValueError as e:
           print(f"Eroare: {e}")

def calculeaza_suma_cifrelor(numar):

   suma_cifre = 0
   while numar:
       suma_cifre += numar % 10
       numar //= 10
   return suma_cifre

if __name__ == "__main__":

   nr_numere = citeste_numar_natural("Introduceți numărul de numere naturale: ")
   max_sum = float('-inf')
   min_sum = float('inf')
   numar_max = None
   numar_min = None
   for i in range(nr_numere):
       numar = citeste_numar_natural_pozitiv(f"Introduceți numărul {i + 1}: ")
       suma_cifre = calculeaza_suma_cifrelor(numar)
       if suma_cifre > max_sum:
           max_sum = suma_cifre
           numar_max = numar
       if suma_cifre < min_sum:
           min_sum = suma_cifre
           numar_min = numar
   print("Datele sunt introduse corect.")
   print(f"Numărul cu suma cifrelor maximă este {numar_max} și suma cifrelor sale este {max_sum}.")
   print(f"Numărul cu suma cifrelor minimă este {numar_min} și suma cifrelor sale este {min_sum}.")

</syntaxhighlight>

Rezolvare ver. 2[edit | edit source]

<syntaxhighlight lang="python" line>

  1. citirea numarului de la tastatura

while True:

   try:
       nr_numere = int(input("Introduceți numărul de numere naturale: "))
       if nr_numere <= 0:
           raise ValueError("Introduceți un număr natural nenul.")
       break
   except ValueError as e:
       print(f"Eroare: {e}")
  1. initializarea valorilor pentru suma maxima si minima

max_sum = float('-inf') min_sum = float('inf') numar_max = None numar_min = None

  1. iteram de nr_numere ori pentru citirea numerelor si determinarea sumei lor

for i in range(nr_numere):

   while True:
       try:
           numar = int(input(f"Introduceți numărul {i + 1}: "))
           if numar < 0:
               raise ValueError("Introduceți un număr natural pozitiv.")
           break
       except ValueError as e:
           print(f"Eroare: {e}")
   # calculam suma cifrelor numarului si verificam daca aceasta este maxima sau minima
   suma_cifre = 0
   copie_numar = numar
   while copie_numar:
       suma_cifre += copie_numar % 10
       copie_numar //= 10
   if suma_cifre > max_sum:
       max_sum = suma_cifre
       numar_max = numar
   if suma_cifre < min_sum:
       min_sum = suma_cifre
       numar_min = numar
  1. afisam rezultatele

print("Datele sunt introduse corect.") print(f"Numărul cu suma cifrelor maximă este {numar_max} și suma cifrelor sale este {max_sum}.") print(f"Numărul cu suma cifrelor minimă este {numar_min} și suma cifrelor sale este {min_sum}.")

</syntaxhighlight>