我正在寻找一种 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 代码吗?
我正在寻找一种 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 代码吗?
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;
}
已测试,有效!,已更新以修复可读性问题
它只不过是N
在基数中生成所有长度数B
(在你的情况下,N 是 3,B 是 2)。