1582 - Max Min: Difference between revisions

From Bitnami MediaWiki
Am creat de la zero.
 
No edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
print("Datele sunt introduse corect.")
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
: 12
: 5
: 23
: 145
: 225
: 198
: 326
: 874
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: 225
: 35
: 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[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>