3162 - cife bin back
Cerința[edit | edit source]
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[edit | edit source]
Programul citește de la tastatură numărul n.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran combinațiile de cifre binare cerute, câte una pe fiecare rând.
Restricții și precizări[edit | edit source]
- 1 ≤ n ≤ 2.000.000
Exemplu 1[edit | edit source]
- Intrare
17
- Iesire
00011
00101
00110
01001
01010
01100
10001
10010
10100
11000
Rezolvare[edit | edit source]
<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>