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
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
<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>