0372 - Numarare 1: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: Sursă: [https://www.pbinfo.ro/probleme/372/numarare1] == Cerinţa == Se citesc '''numar''' numere naturale. Determinați în câte perechi citite consecutiv numerele au sumele cifrelor de parități diferite. == Date de intrare == Programul citește de la tastatură numărul '''numar''', iar apoi '''numar''' numere naturale, separate prin spaţii. == Date de ieşire == Programul afișează pe ecran numărul '''numar_perechi''' , reprezentând numărul de perechi care respec...
 
No edit summary
 
Line 2: Line 2:


== Cerinţa ==
== Cerinţa ==
Se citesc '''numar''' numere naturale. Determinați în câte perechi citite consecutiv numerele au sumele cifrelor de parități diferite.
Se citesc '''n''' numere naturale. Determinați în câte perechi citite consecutiv numerele au sumele cifrelor de parități diferite.
== Date de intrare ==
== Date de intrare ==
Programul citește de la tastatură numărul '''numar''', iar apoi '''numar''' numere naturale, separate prin spaţii.
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 ==
Programul afișează pe ecran numărul '''numar_perechi''' , reprezentând numărul de perechi care respectă regula.
Dacă datele introduse sunt corecte, pe ecran se va afișa '''"Datele introduse sunt corecte."''', apoi programul afișează pe ecran numărul '''m''' , reprezentând numărul de perechi care respectă regula. În caz contrar, se va afișa pe ecran mesajul  '''"Datele introduse nu sunt corecte."'''.
== Restricții și precizări ==
== Restricții și precizări ==
* ''' 1 ⩽ numar ⩽ 100 '''
* ''' 1 ⩽ n ⩽ 100 '''
* cele '''numar''' numere citite vor avea cel mult '''9''' cifre
* cele '''n''' numere citite vor avea cel mult '''9''' cifre


== Exemplu ==
== Exemplu ==
Line 16: Line 16:
: 176 2943 52422 911 1975
: 176 2943 52422 911 1975
; Ieșire
; Ieșire
: Datele introduse sunt corecte.
: 2
: 2
== Explicație ==
== Explicație ==
Line 24: Line 25:
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>


numar = int(input())
def verifica_date_intrare(n: int, numere: list[int]) -> bool:
numar_perechi = 0
    if n < 1 or n > 100:
pr = int(input())
        return False
for i in range(numar-1):
    for numar in numere:
    x = int(input())
        if numar < 0 or numar > 999999999:
    aux = x
            return False
    a = pr
    return True
    s1 = 0
 
    s2 = 0
if __name__ == "__main__":
    while aux != 0:
    n = int(input("Introduceti numarul de numere: "))
        s1 = s1 + aux % 10
    numere_input = input("Introduceti lista de numere separate prin spatii: ").split()
        aux = aux // 10
    numere = [int(numar) for numar in numere_input]
    while a != 0:
 
        s2 = s2 + a % 10
    if verifica_date_intrare(n, numere):
        a = a // 10
        print("Datele introduse sunt corecte.")
    if s1 % 2 == 0 and s2 % 2 == 1:
        numar_perechi = 0
        numar_perechi += 1
        pr = numere[0]
    if s1 % 2 == 1 and s2 % 2 == 0:
        for i in range(1, n):
        numar_perechi += 1
            x = numere[i]
    pr = x
            aux = x
print(numar_perechi)
            a = pr
            s1 = 0
            s2 = 0
            while aux != 0:
                s1 = s1 + aux % 10
                aux = aux // 10
            while a != 0:
                s2 = s2 + a % 10
                a = a // 10
            if s1 % 2 == 0 and s2 % 2 == 1:
                numar_perechi += 1
            if s1 % 2 == 1 and s2 % 2 == 0:
                numar_perechi += 1
            pr = x
        print(numar_perechi)
    else:
        print("Datele introduse nu sunt corecte.")
 


</syntaxhighlight>
</syntaxhighlight>
== Explicație rezolvare ==
Acest cod începe prin definirea unei funcții '''verifica_date_intrare''' care primește doi parametri: '''n''' de tip int și numere de tip '''list[int]'''. Funcția verifică dacă '''n''' este mai mare sau egal cu 1 și mai mic sau egal cu 100, iar fiecare element din lista numere este mai mare sau egal cu 0 și mai mic sau egal cu 999999999. Dacă oricare dintre aceste condiții nu este îndeplinită, funcția va returna '''False''', altfel va returna '''True'''.<br><br>Următoarea secțiune a codului verifică datele de intrare prin intermediul funcției verifica_date_intrare. Dacă datele sunt corecte, utilizatorul este informat că datele introduse sunt corecte printr-un mesaj specific. Variabila '''numere_input''' primește o listă de numere introduse de utilizator, care este apoi convertită într-o listă de numere întregi folosind o buclă for și o listă de comprimare.<br><br>Codul continuă prin inițializarea variabilelor și efectuarea unui număr de iterații de calcul al perechilor de numere. În fiecare iterație, se calculează sumele cifrelor fiecărui număr și se verifică dacă acestea sunt impare sau pare. În funcție de rezultat, variabila '''numar_perechi''' este actualizată. La sfârșit, numărul total de perechi este afișat.

Latest revision as of 19:32, 28 April 2023

Sursă: [1]

Cerinţa[edit]

Se citesc n numere naturale. Determinați în câte perechi citite consecutiv numerele au sumele cifrelor de parități diferite.

Date de intrare[edit]

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

Date de ieşire[edit]

Dacă datele introduse sunt corecte, pe ecran se va afișa "Datele introduse sunt corecte.", apoi programul afișează pe ecran numărul m , reprezentând numărul de perechi care respectă regula. În caz contrar, se va afișa pe ecran mesajul "Datele introduse nu sunt corecte.".

Restricții și precizări[edit]

  • 1 ⩽ n ⩽ 100
  • cele n numere citite vor avea cel mult 9 cifre

Exemplu[edit]

Intrare
5
176 2943 52422 911 1975
Ieșire
Datele introduse sunt corecte.
2

Explicație[edit]

Cele 2 perechi sunt: 2943 52422, 911 1975.

Rezolvare[edit]

<syntaxhighlight lang="python" line>

def verifica_date_intrare(n: int, numere: list[int]) -> bool:

   if n < 1 or n > 100:
       return False
   for numar in numere:
       if numar < 0 or numar > 999999999:
           return False
   return True

if __name__ == "__main__":

   n = int(input("Introduceti numarul de numere: "))
   numere_input = input("Introduceti lista de numere separate prin spatii: ").split()
   numere = [int(numar) for numar in numere_input]
   if verifica_date_intrare(n, numere):
       print("Datele introduse sunt corecte.")
       numar_perechi = 0
       pr = numere[0]
       for i in range(1, n):
           x = numere[i]
           aux = x
           a = pr
           s1 = 0
           s2 = 0
           while aux != 0:
               s1 = s1 + aux % 10
               aux = aux // 10
           while a != 0:
               s2 = s2 + a % 10
               a = a // 10
           if s1 % 2 == 0 and s2 % 2 == 1:
               numar_perechi += 1
           if s1 % 2 == 1 and s2 % 2 == 0:
               numar_perechi += 1
           pr = x
       print(numar_perechi)
   else:
       print("Datele introduse nu sunt corecte.")


</syntaxhighlight>

Explicație rezolvare[edit]

Acest cod începe prin definirea unei funcții verifica_date_intrare care primește doi parametri: n de tip int și numere de tip list[int]. Funcția verifică dacă n este mai mare sau egal cu 1 și mai mic sau egal cu 100, iar fiecare element din lista numere este mai mare sau egal cu 0 și mai mic sau egal cu 999999999. Dacă oricare dintre aceste condiții nu este îndeplinită, funcția va returna False, altfel va returna True.

Următoarea secțiune a codului verifică datele de intrare prin intermediul funcției verifica_date_intrare. Dacă datele sunt corecte, utilizatorul este informat că datele introduse sunt corecte printr-un mesaj specific. Variabila numere_input primește o listă de numere introduse de utilizator, care este apoi convertită într-o listă de numere întregi folosind o buclă for și o listă de comprimare.

Codul continuă prin inițializarea variabilelor și efectuarea unui număr de iterații de calcul al perechilor de numere. În fiecare iterație, se calculează sumele cifrelor fiecărui număr și se verifică dacă acestea sunt impare sau pare. În funcție de rezultat, variabila numar_perechi este actualizată. La sfârșit, numărul total de perechi este afișat.