0269 - Puteri K: Difference between revisions
Pagină nouă: == Cerinţa == Se dau '''n''' numere naturale şi un număr natural '''k'''. Afişaţi în ordine crescătoare acele numere date care sunt puteri ale lui '''k'''. == Date de intrare == Fişierul de intrare '''puterik.in''' conţine pe prima linie numerele '''n''' şi '''k''', iar pe a doua linie '''n''' numere naturale separate prin spaţii. == Date de ieşire == Fişierul de ieşire '''puterik.out''' va conţine pe prima linie numerele care sunt puteri ale lui '''k''', separ... |
No edit summary |
||
Line 2: | Line 2: | ||
Se dau '''n''' numere naturale şi un număr natural '''k'''. Afişaţi în ordine crescătoare acele numere date care sunt puteri ale lui '''k'''. | Se dau '''n''' numere naturale şi un număr natural '''k'''. Afişaţi în ordine crescătoare acele numere date care sunt puteri ale lui '''k'''. | ||
== Date de intrare == | == Date de intrare == | ||
Fişierul de intrare ''' | Fişierul de intrare '''puterikin.txt''' conţine pe prima linie numerele '''n''' şi '''k''', iar pe a doua linie '''n''' numere naturale separate prin spaţii. | ||
== Date de ieşire == | == Date de ieşire == | ||
Fişierul de ieşire ''' | Fişierul de ieşire '''puterikout.txt''' va conţine pe prima linie numerele care sunt puteri ale lui '''k''', separate printr-un spaţiu, în ordine crescătoare. | ||
== Restricții și precizări == | == Restricții și precizări == | ||
* 1 ⩽ n ⩽ 100 | * 1 ⩽ n ⩽ 100 | ||
* 2 ⩽ k ⩽ 10 | * 2 ⩽ k ⩽ 10 | ||
* numerele de pe a doua linie a fişierului de intrare vor avea cel mult '''8''' cifre | * numerele de pe a doua linie a fişierului de intrare vor avea cel mult '''8''' cifre | ||
== | == Exemplul 1 == | ||
; | ; puterikin.txt | ||
8 2 | |||
32 56 317 809 256 2 1 60 | |||
; | ; puterikout.txt | ||
Datele de intrare corespund restrictiilor impuse | |||
1 2 32 256 | |||
<br> | |||
== Exemplul 2 == | |||
; puterikin.txt | |||
gjkfjgkfjgkfgf | |||
; puterikout.txt | |||
Datele de intrare nu corespund restrictiilor impuse | |||
<br> | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat | |||
def validare(n_validare, k_validare, numere_validare): | |||
# Verificăm dacă n este în intervalul 1-100 | |||
if n_validare < 1 or n_validare > 100: | |||
raise ValueError # Ridicăm o eroare dacă n nu este în intervalul 1-100 | |||
# Verificăm dacă k este în intervalul 2-10 | |||
if k_validare < 2 or k_validare > 10: | |||
raise ValueError # Ridicăm o eroare dacă k nu este în intervalul 2-10 | |||
for numar in numere_validare: # Parcurgem lista de numere | |||
# Verificăm dacă numărul are cel mult 8 cifre | |||
if len(str(numar)) > 8: | |||
raise ValueError | |||
file_out.write("Datele de intrare corespund restrictiilor impuse\n") | |||
# Funcția puterik calculează numerele care sunt puteri ale lui k | |||
def puterik(k, numere): | |||
import math # Importăm modulul math pentru a folosi funcția log | |||
# Verificăm dacă fiecare număr este o putere a lui k și creăm o listă cu aceste numere | # Verificăm dacă fiecare număr este o putere a lui k și creăm o listă cu aceste numere | ||
puteri_k = [num for num in numere if (num != 0 and ((math.log(num, k) % 1) == 0))] | puteri_k = [num for num in numere if (num != 0 and ((math.log(num, k) % 1) == 0))] | ||
puteri_k.sort() # Sortăm lista în ordine crescătoare | puteri_k.sort() # Sortăm lista în ordine crescătoare | ||
return puteri_k | |||
puterik() | if __name__ == '__main__': | ||
file_in = open("puterikin.txt", "r") | |||
file_out = open("puterikout.txt", "w") | |||
try: | |||
# Citim numărul de numere și k | |||
n_main, k_main = map(int, file_in.readline().split()) | |||
# Citim numerele | |||
numere_main = list(map(int, file_in.readline().split())) | |||
# Validăm datele de intrare | |||
validare(n_main, k_main, numere_main) | |||
# Calculăm numerele care sunt puteri ale lui k | |||
puteri_k_main = puterik(k_main, numere_main) | |||
# Scriem numerele care sunt puteri ale lui k în fișierul de ieșire | |||
file_out.write(' '.join(map(str, puteri_k_main)) + '\n') | |||
# Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare | |||
except ValueError: | |||
file_out.write("Datele de intrare nu corespund restrictiilor impuse") | |||
# Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare | |||
except IndexError: | |||
file_out.write("Datele de intrare nu corespund restrictiilor impuse") | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 15:09, 27 November 2023
Cerinţa[edit | edit source]
Se dau n numere naturale şi un număr natural k. Afişaţi în ordine crescătoare acele numere date care sunt puteri ale lui k.
Date de intrare[edit | edit source]
Fişierul de intrare puterikin.txt conţine pe prima linie numerele n şi k, iar pe a doua linie n numere naturale separate prin spaţii.
Date de ieşire[edit | edit source]
Fişierul de ieşire puterikout.txt va conţine pe prima linie numerele care sunt puteri ale lui k, separate printr-un spaţiu, în ordine crescătoare.
Restricții și precizări[edit | edit source]
- 1 ⩽ n ⩽ 100
- 2 ⩽ k ⩽ 10
- numerele de pe a doua linie a fişierului de intrare vor avea cel mult 8 cifre
Exemplul 1[edit | edit source]
- puterikin.txt
8 2 32 56 317 809 256 2 1 60
- puterikout.txt
Datele de intrare corespund restrictiilor impuse 1 2 32 256
Exemplul 2[edit | edit source]
- puterikin.txt
gjkfjgkfjgkfgf
- puterikout.txt
Datele de intrare nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat
def validare(n_validare, k_validare, numere_validare):
# Verificăm dacă n este în intervalul 1-100 if n_validare < 1 or n_validare > 100: raise ValueError # Ridicăm o eroare dacă n nu este în intervalul 1-100 # Verificăm dacă k este în intervalul 2-10 if k_validare < 2 or k_validare > 10: raise ValueError # Ridicăm o eroare dacă k nu este în intervalul 2-10 for numar in numere_validare: # Parcurgem lista de numere # Verificăm dacă numărul are cel mult 8 cifre if len(str(numar)) > 8: raise ValueError file_out.write("Datele de intrare corespund restrictiilor impuse\n")
- Funcția puterik calculează numerele care sunt puteri ale lui k
def puterik(k, numere):
import math # Importăm modulul math pentru a folosi funcția log # Verificăm dacă fiecare număr este o putere a lui k și creăm o listă cu aceste numere puteri_k = [num for num in numere if (num != 0 and ((math.log(num, k) % 1) == 0))] puteri_k.sort() # Sortăm lista în ordine crescătoare return puteri_k
if __name__ == '__main__':
file_in = open("puterikin.txt", "r") file_out = open("puterikout.txt", "w")
try: # Citim numărul de numere și k n_main, k_main = map(int, file_in.readline().split()) # Citim numerele numere_main = list(map(int, file_in.readline().split())) # Validăm datele de intrare validare(n_main, k_main, numere_main) # Calculăm numerele care sunt puteri ale lui k puteri_k_main = puterik(k_main, numere_main) # Scriem numerele care sunt puteri ale lui k în fișierul de ieșire file_out.write(' '.join(map(str, puteri_k_main)) + '\n')
# Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare except ValueError: file_out.write("Datele de intrare nu corespund restrictiilor impuse") # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare except IndexError: file_out.write("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>