如何在C中重复生成所有可能的变化

时间:2010-12-02 17:16:18

标签: c combinatorics variations

我正在寻找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 个答案:

答案 0 :(得分:4)

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;
}

已测试,有效!,已更新以修复可读性问题

答案 1 :(得分:2)

除了在基础N中生成所有长度为B的数量之外别无他法(在您的情况下,N为3,B为2)。