0372 - Numarare 1: Difference between revisions
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 ''' | 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 ''' | 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 == | ||
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 ⩽ | * ''' 1 ⩽ n ⩽ 100 ''' | ||
* cele ''' | * 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: | ||
if n < 1 or n > 100: | |||
return False | |||
for i in range( | 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 | |||
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 | edit source]
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 | 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]
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 | edit source]
- 1 ⩽ n ⩽ 100
- cele n numere citite vor avea cel mult 9 cifre
Exemplu[edit | edit source]
- Intrare
- 5
- 176 2943 52422 911 1975
- Ieșire
- Datele introduse sunt corecte.
- 2
Explicație[edit | edit source]
Cele 2 perechi sunt: 2943 52422, 911 1975.
Rezolvare[edit | edit source]
<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 | edit source]
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.