4227 - Cif Tr: Difference between revisions
No edit summary |
No edit summary |
||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
Sursă: [https://www.pbinfo.ro/probleme/4227/cif-tr] | Sursă: [https://www.pbinfo.ro/probleme/4227/cif-tr] | ||
== Cerinţa == | == Cerinţa == | ||
Se dau două numere naturale ''' | Când adunăm două cifre '''cifra1''' și '''cifra2''', obținem transport dacă '''cifra1''' + '''cifra2''' ≥ 10. Când adunăm două numere naturale, se poate obține chiar de mai multe ori transport. De exemplu, dacă adunăm 538 și 726, atunci obținem de două ori transport, prima oară când adunăm cifrele unităților, 8 + 6, a doua oară când adunăm cifrele sutelor, 5 + 7. <br><br> | ||
Se dau două numere naturale '''n''' și '''m''' care au același număr de cifre. Să se afișeze mesajul NU dacă adunând cele două numere cifră cu cifră nu obținem niciodată transport, sau mesajul DA, dacă obținem măcar o dată transport. | |||
== Date de intrare == | == Date de intrare == | ||
Programul citește de la tastatură numerele ''' | Programul citește de la tastatură numerele '''n''' și '''m'''. | ||
== 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 va afișa mesajul '''NU''' dacă adunând cele două numere cifră cu cifră nu obținem niciodată transport, sau mesajul '''DA''', dacă obținem măcar o dată transport. Î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, m ⩽ 1.000.000.000 | ||
* numerele ''' | * numerele '''n''' și '''m''' au același număr de cifre | ||
== Exemplu == | == Exemplu == | ||
Line 16: | Line 16: | ||
: 538 726 | : 538 726 | ||
; Ieșire | ; Ieșire | ||
: Datele introduse sunt corecte. | |||
: DA | : DA | ||
<br> | <br> | ||
Line 21: | Line 22: | ||
: 1234 8765 | : 1234 8765 | ||
; Ieșire | ; Ieșire | ||
: Datele introduse sunt corecte. | |||
: NU | : NU | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
#4227 | |||
def verifica_date(numar1, numar2): | |||
if len(numar1) != len(numar2) or not numar1.isdigit() or not numar2.isdigit(): | |||
print("Datele introduse nu sunt corecte.") | |||
return False | |||
print("Datele introduse sunt corecte.") | |||
return True | |||
are_transport = False | def are_transport(numar1, numar2): | ||
for i in range(len(numar1)): | |||
suma = int(numar1[i]) + int(numar2[i]) | |||
if suma >= 10: | |||
return True | |||
return False | |||
if __name__ == "__main__": | |||
numar1 = int(input("Introduceti primul numar: ")) | |||
if | numar2 = int(input("Introduceti al doilea numar: ")) | ||
are_transport | if verifica_date(numar1, numar2): | ||
if are_transport(numar1, numar2): | |||
print("DA") | |||
else: | |||
print("NU") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Explicație rezolvare == | |||
Funcția '''verifica_date''' primește două argumente, '''numar1''' și '''numar2''', și verifică dacă acestea au aceeași lungime și dacă fiecare cifră din cele două numere este un număr întreg. Dacă aceste condiții sunt îndeplinite, funcția afișează "Datele introduse sunt corecte." și returnează valoarea True, în caz contrar, afișează "Datele introduse nu sunt corecte." și returnează valoarea False.<br><br>Funcția '''are_transport''' primește, de asemenea, două argumente, '''numar1''' și '''numar2''', și verifică dacă există cel puțin un transport atunci când cele două numere sunt adunate cifră cu cifră. Pentru aceasta, funcția parcurge cifră cu cifră cele două numere și calculează suma. Dacă suma este mai mare sau egală cu 10, funcția returnează valoarea '''True''', altfel returnează valoarea '''False'''.<br><br>În final, funcția '''main''' primește două valori de la utilizator prin intermediul funcției '''input''', apelează funcția '''verifica_date''' pentru a verifica corectitudinea datelor, iar dacă acestea sunt corecte, apelează funcția '''are_transport''' pentru a verifica dacă există un transport în timpul adunării. În funcție de rezultatul obținut, programul afișează '''DA''' dacă există cel puțin un transport și '''NU''' dacă nu există niciun transport. |
Latest revision as of 17:52, 5 May 2023
Sursă: [1]
Cerinţa[edit | edit source]
Când adunăm două cifre cifra1 și cifra2, obținem transport dacă cifra1 + cifra2 ≥ 10. Când adunăm două numere naturale, se poate obține chiar de mai multe ori transport. De exemplu, dacă adunăm 538 și 726, atunci obținem de două ori transport, prima oară când adunăm cifrele unităților, 8 + 6, a doua oară când adunăm cifrele sutelor, 5 + 7.
Se dau două numere naturale n și m care au același număr de cifre. Să se afișeze mesajul NU dacă adunând cele două numere cifră cu cifră nu obținem niciodată transport, sau mesajul DA, dacă obținem măcar o dată transport.
Date de intrare[edit | edit source]
Programul citește de la tastatură numerele n și m.
Date de ieşire[edit | edit source]
Dacă datele introduse sunt corecte, pe ecran se va afișa "Datele introduse sunt corecte.", apoi programul va afișa mesajul NU dacă adunând cele două numere cifră cu cifră nu obținem niciodată transport, sau mesajul DA, dacă obținem măcar o dată transport. Î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, m ⩽ 1.000.000.000
- numerele n și m au același număr de cifre
Exemplu[edit | edit source]
- Intrare
- 538 726
- Ieșire
- Datele introduse sunt corecte.
- DA
- Intrare
- 1234 8765
- Ieșire
- Datele introduse sunt corecte.
- NU
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 4227
def verifica_date(numar1, numar2):
if len(numar1) != len(numar2) or not numar1.isdigit() or not numar2.isdigit(): print("Datele introduse nu sunt corecte.") return False print("Datele introduse sunt corecte.") return True
def are_transport(numar1, numar2):
for i in range(len(numar1)): suma = int(numar1[i]) + int(numar2[i]) if suma >= 10: return True return False
if __name__ == "__main__":
numar1 = int(input("Introduceti primul numar: ")) numar2 = int(input("Introduceti al doilea numar: ")) if verifica_date(numar1, numar2): if are_transport(numar1, numar2): print("DA") else: print("NU")
</syntaxhighlight>
Explicație rezolvare[edit | edit source]
Funcția verifica_date primește două argumente, numar1 și numar2, și verifică dacă acestea au aceeași lungime și dacă fiecare cifră din cele două numere este un număr întreg. Dacă aceste condiții sunt îndeplinite, funcția afișează "Datele introduse sunt corecte." și returnează valoarea True, în caz contrar, afișează "Datele introduse nu sunt corecte." și returnează valoarea False.
Funcția are_transport primește, de asemenea, două argumente, numar1 și numar2, și verifică dacă există cel puțin un transport atunci când cele două numere sunt adunate cifră cu cifră. Pentru aceasta, funcția parcurge cifră cu cifră cele două numere și calculează suma. Dacă suma este mai mare sau egală cu 10, funcția returnează valoarea True, altfel returnează valoarea False.
În final, funcția main primește două valori de la utilizator prin intermediul funcției input, apelează funcția verifica_date pentru a verifica corectitudinea datelor, iar dacă acestea sunt corecte, apelează funcția are_transport pentru a verifica dacă există un transport în timpul adunării. În funcție de rezultatul obținut, programul afișează DA dacă există cel puțin un transport și NU dacă nu există niciun transport.