2214 - Cifre 001: Diferență între versiuni

De la Universitas MediaWiki
Fără descriere a modificării
Linia 1: Linia 1:
Sursa: [pbinfo.ro/probleme/2214/cifre001]
== Cerinţa ==
== Cerinţa ==
Se dau două numere naturale. Dacă cele două numere au acelaşi număr de cifre, să se afle pe câte poziţii aceste cifre coincid.
Se dau două numere naturale. Dacă cele două numere au acelaşi număr de cifre, să se afle pe câte poziţii aceste cifre coincid.
Linia 23: Linia 24:
: DA
: DA
   3
   3
== Rezolvare ==
== Rezolvare ==
=== Rezolvare ver. 1 ===
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>


def citeste_numere():
    while True:
        try:
            numar1 = int(input("Introduceți primul număr: "))  # Citeste primul numar de la utilizator
            numar2 = int(input("Introduceți al doilea număr: "))  # Citeste al doilea numar de la utilizator
            if numar1 <= 0 or numar2 <= 0:
                raise ValueError("Introduceți numere naturale pozitive.")  # Ridica o eroare daca numerele nu sunt naturale pozitive
            break
        except ValueError as e:
            print(f"Eroare: {e}")  # Afiseaza eroarea daca numerele introduse nu sunt valide
    return numar1, numar2
def determina_nr_cifre(numar):
    return len(str(numar))  # Determina numarul de cifre al unui numar prin convertirea la string si apoi determinarea lungimii acestuia
def transforma_in_lista_cifre(numar):
    return [int(x) for x in str(numar)]  # Transforma un numar intr-o lista de cifre prin convertirea la string si apoi convertirea fiecarei cifre la integer
def determina_nr_coincidente(cifre1, cifre2):
    nr_coincidente = 0
    for i in range(len(cifre1)):
        if cifre1[i] == cifre2[i]:  # Verifica daca cifra de pe aceeasi pozitie din cele doua liste coincide
            nr_coincidente += 1
    return nr_coincidente
if __name__ == "__main__":
    numar1, numar2 = citeste_numere()  # Citeste numerele de la utilizator
    nr_cifre1 = determina_nr_cifre(numar1)  # Determina numarul de cifre al primului numar
    nr_cifre2 = determina_nr_cifre(numar2)  # Determina numarul de cifre al celui de-al doilea numar
    if nr_cifre1 != nr_cifre2:
        print("Cele două numere nu au același număr de cifre.")
    else:
        cifre1 = transforma_in_lista_cifre(numar1)  # Transforma primul numar intr-o lista de cifre
        cifre2 = transforma_in_lista_cifre(numar2)  # Transforma al doilea numar intr-o lista de cifre
        nr_coincidente = determina_nr_coincidente(cifre1, cifre2)  # Determina numarul de cifre care coincid pe aceeasi pozitie
        print("Datele sunt introduse corect.")
        print(f"Numerele au {nr_coincidente} cifre care coincid pe aceeași poziție.")
</syntaxhighlight>
=== Rezolvare ver. 2 ===
<syntaxhighlight lang="python" line>


while True:
while True:

Versiunea de la data 15 mai 2023 19:06

Sursa: [pbinfo.ro/probleme/2214/cifre001]

Cerinţa

Se dau două numere naturale. Dacă cele două numere au acelaşi număr de cifre, să se afle pe câte poziţii aceste cifre coincid.

Date de intrare

Programul citește de la tastatură cele două numere naturale, separate prin spații.

Date de ieşire

Programul va afișa pe ecran NU dacă cele două numere nu au acelaşi număr de cifre, respectiv DA dacă au acelaşi număr de cifre. În caz afirmativ se va afişa pe rândul următor numărul poziţiilor în care cifrele celor două numere coincid.

Restricții și precizări

  • cele două numere citite vor fi mai mici decât 2.000.000.000

Exemplu 1

Intrare
2345 17825
Ieșire
NU

Exemplu 2

Intrare
102789 307786
Ieșire
DA
 3

Rezolvare

Rezolvare ver. 1

def citeste_numere():
    while True:
        try:
            numar1 = int(input("Introduceți primul număr: "))  # Citeste primul numar de la utilizator
            numar2 = int(input("Introduceți al doilea număr: "))  # Citeste al doilea numar de la utilizator
            if numar1 <= 0 or numar2 <= 0:
                raise ValueError("Introduceți numere naturale pozitive.")  # Ridica o eroare daca numerele nu sunt naturale pozitive
            break
        except ValueError as e:
            print(f"Eroare: {e}")  # Afiseaza eroarea daca numerele introduse nu sunt valide
    return numar1, numar2


def determina_nr_cifre(numar):
    return len(str(numar))  # Determina numarul de cifre al unui numar prin convertirea la string si apoi determinarea lungimii acestuia


def transforma_in_lista_cifre(numar):
    return [int(x) for x in str(numar)]  # Transforma un numar intr-o lista de cifre prin convertirea la string si apoi convertirea fiecarei cifre la integer


def determina_nr_coincidente(cifre1, cifre2):
    nr_coincidente = 0
    for i in range(len(cifre1)):
        if cifre1[i] == cifre2[i]:  # Verifica daca cifra de pe aceeasi pozitie din cele doua liste coincide
            nr_coincidente += 1
    return nr_coincidente


if __name__ == "__main__":
    numar1, numar2 = citeste_numere()  # Citeste numerele de la utilizator
    nr_cifre1 = determina_nr_cifre(numar1)  # Determina numarul de cifre al primului numar
    nr_cifre2 = determina_nr_cifre(numar2)  # Determina numarul de cifre al celui de-al doilea numar

    if nr_cifre1 != nr_cifre2:
        print("Cele două numere nu au același număr de cifre.")
    else:
        cifre1 = transforma_in_lista_cifre(numar1)  # Transforma primul numar intr-o lista de cifre
        cifre2 = transforma_in_lista_cifre(numar2)  # Transforma al doilea numar intr-o lista de cifre
        nr_coincidente = determina_nr_coincidente(cifre1, cifre2)  # Determina numarul de cifre care coincid pe aceeasi pozitie
        print("Datele sunt introduse corect.")
        print(f"Numerele au {nr_coincidente} cifre care coincid pe aceeași poziție.")

Rezolvare ver. 2

while True:
    try:
        numar1 = int(input("Introduceți primul număr: "))
        numar2 = int(input("Introduceți al doilea număr: "))
        if numar1 <= 0 or numar2 <= 0:
            raise ValueError("Introduceți numere naturale pozitive.")
        break
    except ValueError as e:
        print(f"Eroare: {e}")

# determinam numarul de cifre al celor doua numere
nr_cifre1 = len(str(numar1))
nr_cifre2 = len(str(numar2))

if nr_cifre1 != nr_cifre2:
    print("Cele două numere nu au același număr de cifre.")
else:
    # transformam cele doua numere in liste de cifre
    cifre1 = [int(x) for x in str(numar1)]
    cifre2 = [int(x) for x in str(numar2)]
    nr_coincidente = 0
    for i in range(nr_cifre1):
        if cifre1[i] == cifre2[i]:
            nr_coincidente += 1
    print("Datele sunt introduse corect.")
    print(f"Numerele au {nr_coincidente} cifre care coincid pe aceeași poziție.")