2285 - B2

De la Universitas MediaWiki

Cerința

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

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

Date de ieșire

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

  • 3 ≤ n < 262

Exemplu 1

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

Exemplu 2

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

Rezolvare

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