0995 - Numere 6

From Bitnami MediaWiki
Revision as of 17:05, 2 May 2023 by Hotico Iulia Denisa (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerința[edit | edit source]

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[edit | edit source]

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

Date de ieșire[edit | edit source]

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[edit | edit source]

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

Exemplu 1[edit | edit source]

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


Exemplu 2[edit | edit source]

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


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1">

  1. 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.")

</syntaxhighlight>