0995 - Numere 6: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 2: Line 2:
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.
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 ==
== Date de intrare ==
Fișierul de intrare numere6.in conține pe prima linie cele două numere.
Fișierul de intrare numere6in. txt conține pe prima linie cele două numere.
== Date de ieșire ==  
== Date de ieșire ==  
Fișierul de ieșire numere6.out va conține pe prima linie numărul cerut.
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 ==
== Restricții și precizări ==
cele două numere date vor fi mai mici decât 2 000 000 000
cele două numere date vor fi mai mici decât 2 000 000 000
Line 22: Line 23:
<br>
<br>
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line="1">
# 0995 Numere 6
# 0995 Numere 6
def verificare(nr1, nr2):
def verificare(nr1, nr2):                   # functia de verificare a datelor de intrare
     if nr1 > 2000000 or nr2 > 2000000:
     if nr1 > 2000000 or nr2 > 2000000:     # daca numerele nu respecta restrictia vom ridica eroarea Value Error
         raise ValueError
         raise ValueError
     return True
     return True




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


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


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


     for cifra in range(9, -1, -1):
    # in vectorul de frecventa avem memorat de cate ori apare fiecare cifra
         while frecventa_cifre[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
             frecventa_cifre[cifra] -= 1
             file_out.write(str(cifra))
             file_out.write(str(cifra))
Line 54: Line 56:
if __name__ == '__main__':
if __name__ == '__main__':


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


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


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

Latest revision as of 17:05, 2 May 2023

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>