0269 - Puteri K: Diferență între versiuni
De la Universitas MediaWiki
(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...) |
Fără descriere a modificării |
||
Linia 2: | Linia 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> |
Versiunea curentă din 27 noiembrie 2023 15:09
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 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
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
- 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
- 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
- puterikin.txt
gjkfjgkfjgkfgf
- puterikout.txt
Datele de intrare nu corespund restrictiilor impuse
Rezolvare
# 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")