0995 - Numere 6

De la Universitas MediaWiki

Cerința

Se dau două numere naturale diferite. Afişaţi cel mai mare număr care poate fi scris folosind toate cifrele celor două numere date.

Date de intrare

Fișierul de intrare numere6in. txt conține pe prima linie cele două numere.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: " Datele de intrare corespund restrictiilor impuse" și fișierul de ieșire numere6out.txt va conține pe prima linie numărul cerut. Iar dacă restricțiile nu sunt îndeplinite, se va afișa mesajul:" Datele de intrare nu corespund restrictiilor impuse".

Restricții și precizări

cele două numere date vor fi mai mici decât 2 000 000 000

Exemplu 1

numere6in.txt
36321 4173
numere6out.txt
Datele introduse corespund restricțiilor impuse.
764333211


Exemplu 2

numere6in.txt
10
numere6out.txt
Datele de intrare nu corespund restricțiilor impuse.


Rezolvare

# 0995 Numere 6
def verificare(nr1, nr2):                   # functia de verificare a datelor de intrare
    if nr1 > 2000000 or nr2 > 2000000:      # daca numerele nu respecta restrictia vom ridica eroarea Value Error
        raise ValueError
    return True


def numere6(nr_1, nr_2):                    # functia de rezolvare
    frecventa_cifre = []                    # folosim vectorul de frecventa pentru a retine ce cifre avem
    for i in range(10):
        frecventa_cifre.append(0)

    while nr_1:                             # aflam frecventa cifrelor primului numar
        u_cif = int(nr_1 % 10)
        frecventa_cifre[u_cif] += 1
        nr_1 //= 10

    while nr_2:                             # acum adaugam si frecventa cifrelor celui de-al doilea numar
        u_cif = int(nr_2 % 10)
        frecventa_cifre[u_cif] += 1
        nr_2 //= 10

    # in vectorul de frecventa avem memorat de cate ori apare fiecare cifra

    for cifra in range(9, -1, -1):          # luam cifrele in ordine inversa din vectorul de frecventa
        while frecventa_cifre[cifra]:       # de cate ori apare cifra respectiva o afisam
            frecventa_cifre[cifra] -= 1
            file_out.write(str(cifra))


if __name__ == '__main__':

    file_in = open("numere6in.txt")             # declararea fisierelor
    file_out = open("numere6out.txt", "w")      # fisierul de iesire declarat cu "write"
    numere = file_in.readline().split()

    try:                                        # ne asteptam la eroarea ValueError cauzata de datele de intrare
        numar_1 = int(numere[0])                # transformam numerele in int
        numar_2 = int(numere[1])                # daca nu se pot transforma in int atunci va fi o eroare ValueError
        verificare(numar_1, numar_2)            # apelul functiei de verificare
        numere6(numar_1, numar_2)               # apelul functiei de rezolvare

    except ValueError:
        print("Datele de intrare nu corespund restricțiilor impuse.")