51NOD-3413-小华与布丁

小华非常喜欢吃布丁。这一天她打算购买原味和抹茶味两种布丁,共n个,之后按照一定顺序将n个布丁全部吃完。

然而如果小华连续吃到三个同口味的布丁,她会感到厌腻而无法继续吃。请你帮助小华规划吃布丁的每一种可行的口味顺序,使她能够全部吃完而不产生厌腻感。

输入格式
输入一个数n,表示布丁的数量。
输出格式
每行输出一个由'0'和'1'组成的字符串,表示一种可行的吃布丁的顺序。其中0表示原味,1表示抹茶味。 请将可行的每种方案按字典序升序输入。
输入样例
3
输出样例
001
010
011
100
101
110
数据范围
对于100%的数据,1≤n≤20;

#include <iostream>
using namespace std;
void f(int j, int n, int* a)
{
    if (j == n)
    {
        int flag = 0;
        for (int i = 0; i <= n - 3; i++)
        {
            if (a[i] == 1 && a[i + 1] == 1 && a[i + 2] == 1)
                flag = 1;
            if (a[i] == 0 && a[i + 1] == 0 && a[i + 2] == 0)
                flag = 1;
        }
        if (flag == 0)
        {
            for (int i = 0; i < n; i++)
            {
                cout << a[i];
            }
            cout << endl;
        }
    }
    else
    {
        a[j] = 0;
        f(j + 1, n, a);
        a[j] = 1;
        f(j + 1, n, a);
    }
}
int main()
{
    int n = 0;
    cin >> n;
    int* p = new int[n];
    f(0, n, p);
    return 0;
}