0999 - Numere 7: Difference between revisions
No edit summary |
No edit summary |
||
(6 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
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. | 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 == | == Date de intrare == | ||
Fișierul de intrare | Fișierul de intrare numere7in.txt conține pe prima linie cele două numere. | ||
== Date de ieșire == | == 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 numere7out.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 | ||
== Exemplu 1 == | == Exemplu 1 == | ||
; | ; numere7in.txt | ||
: 36321 4173 | : 36321 4173 | ||
; | ; numere7out.txt | ||
: Datele introduse corespund restricțiilor impuse. | : Datele introduse corespund restricțiilor impuse. | ||
: 112333467 | : 112333467 | ||
<br> | <br> | ||
== Exemplu 2 == | == Exemplu 2 == | ||
; | ; numere7in.txt | ||
: | :2 000 344 678 8 000 000 000 | ||
; | ; numere7out.txt | ||
: Datele de intrare nu corespund restricțiilor impuse. | : Datele de intrare nu corespund restricțiilor impuse. | ||
<br> | <br> | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line="1"> | ||
#0999 Numere 7 | # 0999 Numere 7 | ||
def verificare(nr1, nr2): # functia de verificare a datelor de intrare | |||
if nr1 > 2000000 or nr2 > 2000000: # daca nu respecta cerintele vom ridica eroarea valueError | |||
raise ValueError | |||
return True | |||
def numere6(nr_1, nr_2): # functia de rezolvare | |||
frecventa_cifre = [] # ne vom folosi de un vector de frecventa pentru a vedea cate cifre avem | |||
for i in range(10): | |||
frecventa_cifre.append(0) | |||
while nr_1: # notam cifrele primului numar in vectorul de frecventa | |||
u_cif = int(nr_1 % 10) | |||
frecventa_cifre[u_cif] += 1 | |||
nr_1 //= 10 | |||
while nr_2: # notam cifrele celui de-al doilea numar in vectorul de frecventa | |||
u_cif = int(nr_2 % 10) | |||
frecventa_cifre[u_cif] += 1 | |||
nr_2 //= 10 | |||
ok = False # trebuie sa scriem prima cifra nenula | |||
for cifra in range(1, 10): # cautam in vectorul de frecventa cifra de la 1 la 9 | |||
while frecventa_cifre[cifra]: | |||
frecventa_cifre[cifra] -= 1 | |||
file_out.write(str(cifra)) | |||
ok = True # daca am gasit, notam ca am gasit si atunci putem opri cautarea | |||
if ok: | |||
break | |||
for cifra in range(0, 10): # luam acum in ordine normala cifrele din vectorul de frecventa | |||
while frecventa_cifre[cifra]: | |||
frecventa_cifre[cifra] -= 1 # de cate ori gasim o cifra in vectorul de frecventa, o afisam | |||
file_out.write(str(cifra)) | |||
if __name__ == '__main__': | |||
file_in = open("numere7in.txt") # declararea fisierelor | |||
file_out = open("numere7out.txt", "w") # fisierul de iesire declarat cu clauza "w" (write) | |||
numere = file_in.readline().split() # citirea celor 2 numere | |||
try: # ne asteptam la eroarea ValueError din cauza datelor de intrare eronate | |||
numar_1 = int(numere[0]) # transformam numerele primite in int, daca nu se poate va fi ValueError | |||
numar_2 = int(numere[1]) | |||
verificare(numar_1, numar_2) # apelul functiei de verificare | |||
numere6(numar_1, numar_2) # apelul functiei de rezolvare | |||
except ValueError: # daca apare eroare inseamna ca datele de intrare nu au fost valide | |||
file_out.write("Datele de intrare nu corespund restricțiilor impuse.") | |||
</syntaxhighlight> |
Latest revision as of 17:18, 2 May 2023
Cerința[edit | edit source]
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[edit | edit source]
Fișierul de intrare numere7in.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 numere7out.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]
- numere7in.txt
- 36321 4173
- numere7out.txt
- Datele introduse corespund restricțiilor impuse.
- 112333467
Exemplu 2[edit | edit source]
- numere7in.txt
- 2 000 344 678 8 000 000 000
- numere7out.txt
- Datele de intrare nu corespund restricțiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1">
- 0999 Numere 7
def verificare(nr1, nr2): # functia de verificare a datelor de intrare
if nr1 > 2000000 or nr2 > 2000000: # daca nu respecta cerintele vom ridica eroarea valueError raise ValueError return True
def numere6(nr_1, nr_2): # functia de rezolvare
frecventa_cifre = [] # ne vom folosi de un vector de frecventa pentru a vedea cate cifre avem for i in range(10): frecventa_cifre.append(0)
while nr_1: # notam cifrele primului numar in vectorul de frecventa u_cif = int(nr_1 % 10) frecventa_cifre[u_cif] += 1 nr_1 //= 10
while nr_2: # notam cifrele celui de-al doilea numar in vectorul de frecventa u_cif = int(nr_2 % 10) frecventa_cifre[u_cif] += 1 nr_2 //= 10
ok = False # trebuie sa scriem prima cifra nenula for cifra in range(1, 10): # cautam in vectorul de frecventa cifra de la 1 la 9 while frecventa_cifre[cifra]: frecventa_cifre[cifra] -= 1 file_out.write(str(cifra)) ok = True # daca am gasit, notam ca am gasit si atunci putem opri cautarea if ok: break
for cifra in range(0, 10): # luam acum in ordine normala cifrele din vectorul de frecventa while frecventa_cifre[cifra]: frecventa_cifre[cifra] -= 1 # de cate ori gasim o cifra in vectorul de frecventa, o afisam file_out.write(str(cifra))
if __name__ == '__main__':
file_in = open("numere7in.txt") # declararea fisierelor file_out = open("numere7out.txt", "w") # fisierul de iesire declarat cu clauza "w" (write) numere = file_in.readline().split() # citirea celor 2 numere
try: # ne asteptam la eroarea ValueError din cauza datelor de intrare eronate numar_1 = int(numere[0]) # transformam numerele primite in int, daca nu se poate va fi ValueError numar_2 = int(numere[1]) verificare(numar_1, numar_2) # apelul functiei de verificare numere6(numar_1, numar_2) # apelul functiei de rezolvare
except ValueError: # daca apare eroare inseamna ca datele de intrare nu au fost valide file_out.write("Datele de intrare nu corespund restricțiilor impuse.")
</syntaxhighlight>