Правильно сейчас ее восстановил в памяти? ==> Берем самый правый ноль, заменяем его на 1, все что правее него (там только единицы, раз он самый правый) заменяем на нули. Нужно перебрать комбинации всех возможных перестановок 0 и 1 в последовательности длины N. Во-первых берем к сведению что это будут двоичные числа. Во-вторых 0101 это десятичное 5, 0110 - 6, 0111 - 7, 1000 - 8 и так далее. То есть в переходе к следующему числу есть закономерность - движемся справа налево, если встречаем 1 - заменяем его на 0, если встречаем 0 заменяем его на 1 и останавливаемся. Реализуем это нерекурсивным перебором
n = 4 x = [0] * n def next_(x): i = n - 1 while x[i] == 1: x[i] = 0 i -= 1 x[i] = 1 return x
while x != [1] * n: print(*x) x = next_(x) print(*x)
0 0 0 0 0 0 0 1 0 0 1 0 # В цикл не попадаем, так как x[i] == 0. x[i] заменяем на 1 0 0 1 1 # чик-чик, единички заменяем на нули, встретили ноль, выходим из цикла и встреченный ноль меняем на 1 0 1 0 0 # Опять в цикл не попадаем, так как x[i] == 0. x[i] заменяем на 1 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1
==>
Берем самый правый ноль, заменяем его на 1, все что правее него (там только единицы, раз он самый правый) заменяем на нули.
Нужно перебрать комбинации всех возможных перестановок 0 и 1 в последовательности длины N.
Во-первых берем к сведению что это будут двоичные числа.
Во-вторых 0101 это десятичное 5, 0110 - 6, 0111 - 7, 1000 - 8 и так далее.
То есть в переходе к следующему числу есть закономерность - движемся справа налево, если встречаем 1 - заменяем его на 0, если встречаем 0 заменяем его на 1 и останавливаемся.
Реализуем это нерекурсивным перебором 0 0 0 0
0 0 0 1
0 0 1 0 # В цикл не попадаем, так как x[i] == 0. x[i] заменяем на 1
0 0 1 1 # чик-чик, единички заменяем на нули, встретили ноль, выходим из цикла и встреченный ноль меняем на 1
0 1 0 0 # Опять в цикл не попадаем, так как x[i] == 0. x[i] заменяем на 1
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1