4227 - Cif Tr
Sursă: [1]
Cerinţa
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
Programul citește de la tastatură numerele n și m.
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
- 1 ⩽ n, m ⩽ 1.000.000.000
- numerele n și m au același număr de cifre
Exemplu
- Intrare
- 538 726
- Ieșire
- Datele introduse sunt corecte.
- DA
- Intrare
- 1234 8765
- Ieșire
- Datele introduse sunt corecte.
- NU
Rezolvare
<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
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.