4227 - Cif Tr

De la Universitas MediaWiki

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

#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")

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.