0999 - Numere 7

From Bitnami MediaWiki

Cerința

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

Date de intrare

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

Date de ieșire

Fișierul de ieșire numere7.out va conține pe prima linie numărul cerut.

Restricții și precizări

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

Exemplu 1

numere7.in
36321 4173
numere7.out
Datele introduse corespund restricțiilor impuse.
112333467


Exemplu 2

numere7.in
2 000 344 678 8 000 000 000
numere7.out
Datele de intrare nu corespund restricțiilor impuse.


Rezolvare

<syntaxhighlight lang="python" line>

  1. 0999 Numere 7

def verificare(nr1, nr2):

   if nr1 > 2000000 or nr2 > 2000000:
       raise ValueError
   return True


def numere6(nr_1, nr_2):

   frecventa_cifre = []
   for i in range(10):
       frecventa_cifre.append(0)
   while nr_1:
       u_cif = int(nr_1 % 10)
       frecventa_cifre[u_cif] += 1
       nr_1 //= 10
   while nr_2:
       u_cif = int(nr_2 % 10)
       frecventa_cifre[u_cif] += 1
       nr_2 //= 10
   ok = False
   for cifra in range(1, 10):
       while frecventa_cifre[cifra]:
           frecventa_cifre[cifra] -= 1
           file_out.write(str(cifra))
           ok = True
       if ok:
           break
   for cifra in range(0, 10):
       while frecventa_cifre[cifra]:
           frecventa_cifre[cifra] -= 1
           file_out.write(str(cifra))


if __name__ == '__main__':

   file_in = open("numere7in.txt")
   file_out = open("numere7out.txt", "w")
   numere = file_in.readline().split()
   try:
       numar_1 = int(numere[0])
       numar_2 = int(numere[1])
       verificare(numar_1, numar_2)
       numere6(numar_1, numar_2)
   except ValueError:
       file_out.write("Datele de intrare nu corespund restricțiilor impuse.")