0995 - Numere 6: Difference between revisions
No edit summary |
|||
Line 23: | 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 55: | 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">
- 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>