2579 - Putere 2 Interval

From Bitnami MediaWiki


Cerință

Se citesc 3 numere naturale n, a și b. Afișați primele n puteri ale lui 2, în ordine crescătoare, din intervalul [a,b]. Dacă nu există cel puțin n puteri ale lui 2 în interval, atunci se vor afișa cele care există.


Date de intrare

Programul citește de la tastatură numărul n, a și b, separate prin spații.


Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." Programul va afișa pe ecran puterile lui 2 din intervalul [a,b]. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."

Restricții și precizări

  • 1 ≤ n ≤ 60
  • 1 ≤ a ≤ b < 2^64

Exemplul 1

Intrare
 2 6 35


Ieșire
8 16

Explicatie

În interval există 3 puteri ale lui 2, dar s-au afișat doar n dintre ele.


Rezolvare

Rezolvare ver. 1

<syntaxhighlight lang="python" line="1" start="1">

def validate_input(n: int, a: int, b: int) -> bool:

   if not (1 <= n <= 60):
       print("Numărul n trebuie să fie între 1 și 60.")
       return False
   if not (1 <= a <= b < 2**64):
       print("Numerele a și b trebuie să fie între 1 și 2^64 - 1, și a trebuie să fie mai mic sau egal cu b.")
       return False
   return True

def main():

   n, a, b = map(int, input().split())
   if not validate_input(n, a, b):
       return
   
   powers_of_2 = []
   for i in range(64):
       power_of_2 = 2**i
       if a <= power_of_2 <= b:
           powers_of_2.append(power_of_2)
   
   powers_of_2.sort()
   for i in range(min(n, len(powers_of_2))):
       print(powers_of_2[i], end=' ')

if __name__ == '__main__':

   main()


</syntaxhighlight>

Explicatie

Explicatie

Funcția validate_input este folosită pentru a valida inputul citit de la tastatură. Aceasta verifică dacă valorile citite pentru n, a, și b respectă restricțiile date. Dacă inputul nu este valid, se va afișa un mesaj de eroare și funcția va returna False. Altfel, funcția va returna True.

În funcția main, citim inputul de la tastatură folosind input() și îl procesăm folosind funcția map() și split() pentru a separa valorile citite. Apoi, verificăm dacă inputul este valid folosind funcția validate_input. Dacă inputul nu este valid, funcția se va încheia.

În continuare, parcurgem toate puterile lui 2 din intervalul [a, b], și le stocăm în lista powers_of_2. După ce am stocat toate puterile lui 2 din interval, sortăm lista și afișăm primele n elemente folosind un for loop.