Как сгенерировать все возможные варианты с повторениями в C - PullRequest
0 голосов
/ 02 декабря 2010

Я ищу алгоритм на C для генерации всех возможных вариаций с повторениями для заданной длины и из n элементов. например, если длина равна 3, а элементы: 1, 2. Выходные данные должны быть:

1 1 1

1 1 0

1 0 0

1 0 1

0 0 0

0 0 1

0 1 1

0 1 0

Я уже искал здесь решения, но все, что я мог найти, это реализации на Java или Python, и я не знаю, как переписать их на C. Может кто-нибудь опубликовать код C для этой проблемы здесь?

Ответы [ 2 ]

4 голосов
/ 02 декабря 2010
void g(int l,int v,char *c)
{
    int i=v;
    if (l--==0) 
        puts(c);
    else 
        while(i)
            g(l,(c[l]='0'+--i,v),c);
}

void f(int l,int v)
{
    char c[l+2];
    g(((c[l]=13,c[l+1]=0),l),v,c);
}

int main()
{
    f(3,2);
    return 0;
}

Протестировано, работает !, обновлено, чтобы исправить проблему читабельности

2 голосов
/ 02 декабря 2010

Это не что иное, как генерация всех чисел длины N в базе B (в вашем случае N равно 3, а B равно 2).

...