1582 - Max Min
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>
- 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}")
- initializarea valorilor pentru suma maxima si minima
max_sum = float('-inf') min_sum = float('inf') numar_max = None numar_min = None
- 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
- 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>