2285 - B2

From Bitnami MediaWiki

Cerința[edit | edit source]

Fie un număr natural n, n < 262. Să se afişeze toate numerele naturale mai mici sau egale cu n, cu proprietatea că reprezentarea lor in baza 2 are exact două cifre 1.

Date de intrare[edit | edit source]

Fişierul de intrare b2.in conţine pe prima linie numărul natural n.

Date de ieșire[edit | edit source]

Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse."

Pe următoarea linie se vor afișa în ordine crescătoare numerele cerute, pe o singură linie cu spaţiu între ele.

În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse."

Restricții și precizări[edit | edit source]

  • 3 ≤ n < 262

Exemplu 1[edit | edit source]

Intrare
20
Ieșire
Datele de intrare corespund restricțiilor impuse.
3 5 6 9 10 12 17 18 20

Exemplu 2[edit | edit source]

Intrare
1
Ieșire
Datele de intrare nu corespund restricțiilor impuse.

Rezolvare[edit | edit source]

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

  1. 2285 B2

def conditii(n):

   return 3 <= n < 2**62


def b2(n):

   rezultat = []
   # Parcurgem numerele naturale de la 1 la n
   # Folosim n+1 pentru a-l include și pe n
   for i in range(1, n+1):
       # bin() este o funcție built-in care transformă un număr în reprezentarea sa binară
       # Secționăm reprezentarea [2:] pentru a elimina prefixul "0b"
       binary = bin(i)[2:]
       # count() este o funcție built-in care numără de câte ori apare un subșir într-un șir
       # Dacă avem exact două cifre "1", îl adăugăm la rezultat
       if binary.count('1') == 2:
           rezultat.append(i)
   # Sortăm și printăm vectorul rezultat
   print(" ".join([str(x) for x in sorted(rezultat)]))


if __name__ == "__main__":

   n = int(input())
   if not conditii(n):
       print("Datele de intrare nu corespund restricțiilor impuse.")
   else:
       print("Datele de intrare corespund restricțiilor impuse.")
       b2(n)

</syntaxhighlight>