0269 - Puteri K
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>