0254 - Puteri

From Bitnami MediaWiki
Revision as of 16:19, 26 April 2023 by Paul Ungur (talk | contribs)

Cerinţa

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

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

Date de ieşire

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.

Restricţii şi precizări

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

Exemplu:

Date de intrare 3 2 69 20 10 19 25

Date de ieşire 64 16 0

Rezolvare

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