#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
void aux(int *f, int *l, int *table, int cnt, int cur)
{
if (f == l || cur == cnt)
{
if (cur == cnt)
{
int i;
for (i = 0; i < cnt; ++i)
{
printf("%d ", table[i]);
}
printf("\n");
}
}
else
{
table[cur] = *f;
aux(f + 1, l, table, cnt, cur + 1);
aux(f + 1, l, table, cnt, cur);
}
}
void func(int *f, int *l)
{
int size = l - f;
int *table = (int *)malloc(sizeof(int) * size);
int i;
for (i = 1; i <= size; ++i)
{
printf("抓取 %d 个的所有组合为:\n", i);
aux(f, l, table, i, 0);
}
free(table);
}
int main()
{
int src[] = {1, 2, 3, 4, 5};
func(src, src + sizeof(src) / sizeof(src[0]));
system("pause");
return 0;
#include<stdlib.h>
#include<malloc.h>
void aux(int *f, int *l, int *table, int cnt, int cur)
{
if (f == l || cur == cnt)
{
if (cur == cnt)
{
int i;
for (i = 0; i < cnt; ++i)
{
printf("%d ", table[i]);
}
printf("\n");
}
}
else
{
table[cur] = *f;
aux(f + 1, l, table, cnt, cur + 1);
aux(f + 1, l, table, cnt, cur);
}
}
void func(int *f, int *l)
{
int size = l - f;
int *table = (int *)malloc(sizeof(int) * size);
int i;
for (i = 1; i <= size; ++i)
{
printf("抓取 %d 个的所有组合为:\n", i);
aux(f, l, table, i, 0);
}
free(table);
}
int main()
{
int src[] = {1, 2, 3, 4, 5};
func(src, src + sizeof(src) / sizeof(src[0]));
system("pause");
return 0;
}
main是设定5个数组元素中,func是设定5个元素取1-5个元素做组合,aux是每组组合的具体实现结果。
运行结果是:
1,2,3,4,5
12,13,14,15,23,24,25,34,35,45
123,124,125,234,235,345
1234,1235,2345
12345
如果设定了计数器,就能够得到这些组合的个数
很好,很简单的算法。
以前自己也做个一个算法,也是用到了递归,很繁琐的,但是因此明白了数据结构的重要性。