C/C++

Помогите написать код (как можно примитивнее)

Цепочки из 0 и 1. Генерировать все цепочки из 0 и 1 длины n, в которых нет двух нулей подряд. Число n вводится.
Исходные данные:
3
Результат:
010
011
101
110
111
#include <iostream>
#include <vector>
#include <random>
using namespace std;
int main() {
int n;
cin >> n;
uniform_int_distribution<int> uid(48, 49);
mt19937 gen{ random_device()() };
auto m = 5;
vector<char> box(n);
do {
auto i = 0;
box[i] = uid(gen);
while (i < n - 1) {
char ch = uid(gen);
if (box[i] != ch || ch != '0') {
++i;
box[i] = ch;
}
}
for (const auto chain : box) putchar(chain);
puts("");
} while (--m);
system("pause > nul");
}
Дима Мовчан
Дима Мовчан
99 231
Лучший ответ
#include < stdio.h >

int check(unsigned int n) { while (n > 3) {if ((n & 3) == 3) return 0; n >>= 1;} return 1; }
void print(unsigned int n) { while (n > 1) {printf("%c", "10"[n&1]); n>>=1;} puts(""); }

int main(void)
{
int n = 3;
for (unsigned int i = (1<<(n+1))-1; i >= (1<<n); i--) if (check(i)) print(i);
}
Ikrom Ergashev
Ikrom Ergashev
50 458
алгоритм :
вводите n
объявляете переменную со значением 1
и в цикле переводите её в биты, пока длина не будет больше n
если длина меньше n заполняете впереди нулями
потом цекаете, если число содержит два нуля подряд, то выводите, если нет, не выводите, допустим записываете биты в вектор
bool correct = true;
for(int i=0;i<mass.size()-1;i++)
{
if (mass[i] == 0 && mass[i+1] == 0)
correct = false;
}
if (correct)
выводите
Омар .....
Омар .....
1 012