2750 - Gen Nr: Diferență între versiuni

De la Universitas MediaWiki
Fără descriere a modificării
 
Linia 1: Linia 1:
sursa: [https://www.pbinfo.ro/probleme/2750/gennr]
== Cerinţa ==
== Cerinţa ==
Se citesc 2 numere naturale, cu cel mult 12 cifre fiecare. Să se afișeze cel mai mic și cel mai mare număr având exact două cifre, format cu o cifră din primul număr și cu o cifră din al doilea.
Se citesc 2 numere naturale, cu cel mult 12 cifre fiecare. Să se afișeze cel mai mic și cel mai mare număr având exact două cifre, format cu o cifră din primul număr și cu o cifră din al doilea.
Linia 24: Linia 25:


<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
# Citim cele două numere și verificăm dacă sunt numere naturale cu cel mult 12 cifre fiecare
while True:
    a = input("Introduceți primul număr: ")
    b = input("Introduceți al doilea număr: ")
    if not (a.isdigit() and b.isdigit() and len(a) <= 12 and len(b) <= 12):
        print("Numerele introduse sunt invalide. Vă rugăm să introduceți două numere naturale cu cel mult 12 cifre fiecare.")
    else:
        a = int(a)
        b = int(b)
        break


# Descompunem cele două numere în cifre
def citeste_numar_valid(mesaj):
a_cifre = [int(c) for c in str(a)]
    while True:
b_cifre = [int(c) for c in str(b)]
        try:
            numar = int(input(mesaj))
            if numar < 0 or numar > 999999999999:
                raise ValueError
            return numar
        except ValueError:
            print("Numărul introdus este invalid. Vă rugăm să introduceți un număr natural cu cel mult 12 cifre.")
 
 
def gaseste_numere_minim_si_maxim(a, b):
    cifre_a = [int(cifra) for cifra in str(a)]
    cifre_b = [int(cifra) for cifra in str(b)]
    minim = None
    maxim = None
 
    # Iterăm prin cifrele ambelor numere și formăm numere cu două cifre
    for cifra_a in cifre_a:
        for cifra_b in cifre_b:
            if cifra_a != cifra_b:
                numar1 = cifra_a * 10 + cifra_b
                numar2 = cifra_b * 10 + cifra_a
 
                # Verificăm dacă numerele formate sunt cu două cifre
                if numar1 >= 10:
                    # Actualizăm minimul și maximul
                    if minim is None or numar1 < minim:
                        minim = numar1
                    if maxim is None or numar1 > maxim:
                        maxim = numar1
 
                if numar2 >= 10:
                    if minim is None or numar2 < minim:
                        minim = numar2
                    if maxim is None or numar2 > maxim:
                        maxim = numar2
 
    return minim, maxim


# Inițializăm cel mai mic și cel mai mare număr cu 99
cel_mai_mic = 99
cel_mai_mare = 0


# Iterăm prin toate combinațiile posibile de cifre
if __name__ == "__main__":
for cifra_a in a_cifre:
     a = citeste_numar_valid("Introduceți primul număr: ")
     for cifra_b in b_cifre:
    b = citeste_numar_valid("Introduceți al doilea număr: ")
        # Combinațiile de cifre sunt reprezentate de numere întregi cu două cifre
        numar = cifra_a * 10 + cifra_b


        # Actualizăm cel mai mic și cel mai mare număr găsit până acum
    minim_numar, maxim_numar = gaseste_numere_minim_si_maxim(a, b)
        if numar < cel_mai_mic:
            cel_mai_mic = numar
        if numar > cel_mai_mare:
            cel_mai_mare = numar


# Afisăm cel mai mic și cel mai mare număr găsit
    if minim_numar is None or maxim_numar is None:
print("Cel mai mic număr cu două cifre format din cifrele celor două numere este:", cel_mai_mic)
        print("Nu există cifre în comun între cele două numere sau nu există numere cu două cifre.")
print("Cel mai mare număr cu două cifre format din cifrele celor două numere este:", cel_mai_mare)
    else:
        print("Cel mai mic număr cu două cifre distincte format din cifrele celor două numere este:", minim_numar)
        print("Cel mai mare număr cu două cifre distincte format din cifrele celor două numere este:", maxim_numar)


</syntaxhighlight>
</syntaxhighlight>

Versiunea curentă din 16 mai 2023 00:14

sursa: [1]

Cerinţa

Se citesc 2 numere naturale, cu cel mult 12 cifre fiecare. Să se afișeze cel mai mic și cel mai mare număr având exact două cifre, format cu o cifră din primul număr și cu o cifră din al doilea.

Date de intrare

Programul citește de la tastatură cele 2 numere separate printr-un spațiu.

Date de ieşire

Programul va afișa pe ecran cel mai mic și cel mai mare număr de exact două cifre format cu o cifră din primul număr și cu o cifră din al doilea, separate printr-un spațiu.

Restricții și precizări

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

Exemplu

Intrare
293 412
Ieșire
Datele introduse corespund restricțiilor impuse.
12 94

Explicație

Cifrele 1 și 2 sunt cele mai mici cifre din al doilea respectiv primul număr și astfel se formează 12, iar 9 și 4 sunt cele mai mari cifre din primul respectiv al doilea număr și astfel se formează 94

Rezolvare

def citeste_numar_valid(mesaj):
    while True:
        try:
            numar = int(input(mesaj))
            if numar < 0 or numar > 999999999999:
                raise ValueError
            return numar
        except ValueError:
            print("Numărul introdus este invalid. Vă rugăm să introduceți un număr natural cu cel mult 12 cifre.")


def gaseste_numere_minim_si_maxim(a, b):
    cifre_a = [int(cifra) for cifra in str(a)]
    cifre_b = [int(cifra) for cifra in str(b)]
    minim = None
    maxim = None

    # Iterăm prin cifrele ambelor numere și formăm numere cu două cifre
    for cifra_a in cifre_a:
        for cifra_b in cifre_b:
            if cifra_a != cifra_b:
                numar1 = cifra_a * 10 + cifra_b
                numar2 = cifra_b * 10 + cifra_a

                # Verificăm dacă numerele formate sunt cu două cifre
                if numar1 >= 10:
                    # Actualizăm minimul și maximul
                    if minim is None or numar1 < minim:
                        minim = numar1
                    if maxim is None or numar1 > maxim:
                        maxim = numar1

                if numar2 >= 10:
                    if minim is None or numar2 < minim:
                        minim = numar2
                    if maxim is None or numar2 > maxim:
                        maxim = numar2

    return minim, maxim


if __name__ == "__main__":
    a = citeste_numar_valid("Introduceți primul număr: ")
    b = citeste_numar_valid("Introduceți al doilea număr: ")

    minim_numar, maxim_numar = gaseste_numere_minim_si_maxim(a, b)

    if minim_numar is None or maxim_numar is None:
        print("Nu există cifre în comun între cele două numere sau nu există numere cu două cifre.")
    else:
        print("Cel mai mic număr cu două cifre distincte format din cifrele celor două numere este:", minim_numar)
        print("Cel mai mare număr cu două cifre distincte format din cifrele celor două numere este:", maxim_numar)