0269 - Puteri K: Difference between revisions

From Bitnami 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...
 
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 '''puterik.in''' conţine pe prima linie numerele '''n''' şi '''k''', iar pe a doua linie '''n''' numere naturale separate prin spaţii.
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 '''puterik.out''' va conţine pe prima linie numerele care sunt puteri ale lui '''k''', separate printr-un spaţiu, în ordine crescătoare.
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
== Exemplu ==
== Exemplul 1 ==
; puterik.in
; puterikin.txt
: 8 2
8 2
: 32 56 317 809 256 2 1 60
32 56 317 809 256 2 1 60
; puterik.out
; puterikout.txt
: 1 2 32 256
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>
import math # Importăm modulul math pentru a folosi funcția log
# 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")


def puterik():
    with open('puterik.in', 'r') as intrare:  # Deschidem fișierul de intrare pentru citire
        n, k = map(int, intrare.readline().split())  # Citim n și k de pe prima linie a fișierului
        numere = list(map(int, intrare.readline().split()))  # Citim numerele de pe a doua linie a fișierului


# 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


    with open('puterik.out', 'w') as iesire:  # Deschidem fișierul de ieșire pentru scriere
        iesire.write(' '.join(map(str, puteri_k)))  # Scriem numerele în fișier, separate printr-un spațiu


puterik() # Apelăm funcția
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>

  1. 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")


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