3162 - cife bin back

From Bitnami MediaWiki

Cerința

Se dă un număr natural n. Afișați în ordine lexicografică toate secvențele de cifre binare care au atâtea cifre de 0 și atâtea cifre de 1 câte are reprezentarea binară a lui n.

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieșire

Programul va afișa pe ecran combinațiile de cifre binare cerute, câte una pe fiecare rând.

Restricții și precizări

  • 1 ≤ n ≤ 2.000.000

Exemplu 1

Intrare

17

Iesire

00011
00101
00110
01001
01010
01100
10001
10010
10100
11000

Rezolvare

<syntaxhighlight lang="python" line> from itertools import permutations

def generate_binary_sequences(n):

   binary_representation = bin(n)[2:]
   count_ones = binary_representation.count('1')
   count_zeros = len(binary_representation) - count_ones
   # Create the base string with the correct number of 1s and 0s
   base_string = '1' * count_ones + '0' * count_zeros
   # Generate all unique permutations of the base string
   unique_permutations = sorted(set(permutations(base_string)))
   # Convert tuples back to strings
   result = [.join(p) for p in unique_permutations]
   return result

def main():

   n = int(input().strip())
   results = generate_binary_sequences(n)
   for result in results:
       print(result)

if __name__ == "__main__":

   main()

</syntaxhighlight>