0254 - Puteri

From Bitnami MediaWiki

Cerinţa[edit | edit source]

Se dau n perechi de numere naturale a, b. Să se determine pentru fiecare pereche, dacă există, cea mai mare putere a lui 2 din intervalul închis determinat de a şi b.

Date de intrare[edit | edit source]

Programul citeşte de la tastatură numărul n, apoi n perechi de numere a, b.

Date de ieşire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Date de intrare valide.", apoi programul va afişa pe câte o linie ecranului, pentru fiecare interval dat, cea mai mare putere a lui 2 din interval, sau 0, dacă intervalul nu conţine nici o putere al lui 2. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Date de intrare invalide".

Restricţii şi precizări[edit | edit source]

1 ≤ n ≤ 10000 fiecare dintre numerele a şi b au cel mult 9 cifre. intervalele sunt închise

Exemplu:[edit | edit source]

Date de intrare

3
2 69
20 10
19 25

Date de ieşire

Date de intrare valide
64
16
0

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def validare(n, a, b):

   for i in range(n):
       if not (1 <= n <= 10_000):
           return False
       if not (0 <= a[i] < 1_000_000_000 and 0 <= b[i] < 1_000_000_000):
           return False
   return True


def puteri(n, a, b):

   for i in range(n):
       p = 1
       while p * 2 <= max(b[i], a[i]):
           p = p * 2
       if p >= min(a[i], b[i]):
           print(p)
       else:
           print(0)


if __name__ == '__main__':

   n = int(input())
   a, b = [], []
   for i in range(n):
       ai, bi = map(int, input().split())
       a.append(ai)
       b.append(bi)
   if validare(n, a, b):
       print("Date de intrare valide")
       puteri(n, a, b)
   else:
       print("Date de intrare invalide")

</syntaxhighlight>

Explicatie cod:[edit | edit source]

Funcția validare(n, a, b) primește trei parametri: n de tip întreg, a și b liste de numere întregi. Funcția parcurge fiecare element din listele a și b și verifică dacă n este în intervalul [1, 10000], iar valorile din listele a și b sunt în intervalul [0, 999999999]. Dacă toate aceste condiții sunt îndeplinite pentru fiecare pereche de numere, funcția returnează True, altfel returnează False. Funcția puteri(n, a, b) primește trei parametri: n de tip întreg și a și b liste de numere întregi. Funcția parcurge fiecare element din listele a și b și calculează cea mai mare putere a lui 2 (p) care este mai mică sau egală cu maximul dintre cele două numere. Apoi, verifică dacă p este mai mare sau egal cu minimul dintre cele două numere. În funcție de această verificare, se afișează p sau 0. În blocul if __name__ == '__main__':, se citește n de la intrarea standard și se inițializează listele goale a și b. Se citește perechea de numere ai și bi de n ori și se adaugă valorile în listele corespunzătoare. Se validează datele de intrare utilizând funcția validare(n, a, b). Dacă datele de intrare sunt valide, se afișează un mesaj de confirmare, se apelează funcția puteri(n, a, b) și se afișează rezultatele. Altfel, se afișează un mesaj de eroare. Codul primește datele de intrare de la utilizator, validează datele și efectuează operațiile specifice pentru a determina și afișa rezultatele.