1582 - Max Min: Difference between revisions
Am creat de la zero. |
No edit summary |
||
| (One intermediate revision by the same user not shown) | |||
| Line 1: | Line 1: | ||
sursa: [https://www.pbinfo.ro/probleme/1582/max-min] | |||
== Cerinţa == | == Cerinţa == | ||
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 == | == Date de intrare == | ||
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații. | |||
== Date de ieşire == | == Date de ieşire == | ||
Minimul va fi afișat pe primul rând și maximul pe al doilea rând. | |||
== Restricții și precizări == | == Restricții și precizări == | ||
* | * 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 == | == Exemplu == | ||
; Intrare | ; Intrare | ||
: | : 5 | ||
: | : 145 | ||
: 225 | |||
: 198 | |||
: 326 | |||
: 874 | |||
; Ieșire | ; Ieșire | ||
: | : 225 | ||
: | : 874 | ||
== Explicație == | |||
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 == | == Rezolvare == | ||
=== Rezolvare ver. 1=== | |||
<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 === | |||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
Latest revision as of 22:58, 15 May 2023
sursa: [1]
Cerinţa
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
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.
Date de ieşire
Minimul va fi afișat pe primul rând și maximul pe al doilea rând.
Restricții și precizări
- 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
- Intrare
- 5
- 145
- 225
- 198
- 326
- 874
- Ieșire
- 225
- 874
Explicație
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
Rezolvare ver. 1
<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
<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>