Tag: 组合

C中数字的排列

我正在尝试编写一个C函数来列出一组数字的所有排列,以五个为一组,包括重复数字: 15-11-49-43-5 2-30-34-6-11 所以编写一个函数来获取一个数字集的所有排列并将它们抛出是很容易的,但是映射到某个组大小,我有点卡住..

C中的所有可能组合

我试图在C中找到一个有效的算法,它为我提供了给定字符集的所有组合。 算法不应该递归。 最后,位数应该是灵活的。 例如: char set[] = “a1”; -> a1 aa 1a 11 我只找到了一个Perl解决方案,但它使用了substr() 。 我认为那不是那么快的表现。 对于C语言中的大多数算法,我发现只有排列… 德国C ++论坛上的一篇文章称,C ++ – STL解决方案比“原始”递归算法更快。

如何使用C中的递归生成4位二进制组合0,1?

对于这个数组,尝试这样的事情: void rollover(int val,int count) { if(count==0) { return; } printf(“%d “,val); count–; rollover(val,count); } int main() { int arr[]={0,1}; for(int i=0;i<=1;i++) { rollover(arr[i],4); } printf("\n"); return 0; } 使用递归方法的预期输出: 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 无法理解如何编写rec函数。 我花了几个小时来解决它。 有人可以协助编写该function吗? 我正在尝试做下面发布的G_G之类的事情。 我怎么能写这样的递归函数? 我是否必须使用一个for循环来调用递归函数,或者使用两个for循环来递归,还是应该调用两次递归函数? 例如: void rollover(int […]

生成数字组合而不重复的算法

我在这里检查了几乎所有类似的post,但我无法弄清楚我怎么能做我想要的。 我正在尝试的是在C程序中输入一个输入,比如说4号,程序在数组中返回以下数字: 1 2 3 4 12 13 14 23 24 34 123 134 124 1234 更清楚:如果输入数字是4,那么我想使用数字1-4并生成所有可能的数字组合(从1位组合到4位组合),没有数字重复。 我尝试了以下代码: #include /* Prints out a combination like {1, 2} */ void printc(int comb[], int k) { printf(“{“); int i; for (i = 0; i = 0) && (comb[i] >= n – k + 1 + i)) { […]

在C中创建n个项目的k和m组合的所有可能子集

我正在为我的问题寻找解决方案:我必须编写一个代码来计算独特元素的组合,即n个元素的所有不同组合被选为k元素组并重新计算剩余子集的新组合而不复制。 给定S,所有可能的唯一元素的集合,我必须计算S的元素的唯一组合的子集T,现在我必须重新计算新的子集 – V – T的组合并且所有子集T和V必须是独特: For example I have this set S: {0, 1, 2, 3, 4} 我必须得到 a {0, 1} {2, 3} { 4} b {0, 1} {2, 4} { 3} c {0, 1} {3, 4} { 2} d {0, 2} {1, 3} { 4} e {0, 2} {1, 4} { 3} f […]

查找字符串的所有唯一排列而不生成重复项

通过众所周知的Steinhaus-Johnson-Trotter算法找到字符串的所有排列。 但是如果字符串包含重复的字符,例如 AABB, 然后可能的唯一组合将是4!/(2!* 2!)= 6 实现此目的的一种方法是我们可以将其存储在数组中,然后删除重复项。 有没有更简单的方法来修改Johnson算法,因此我们永远不会生成重复的排列。 (以最有效的方式)