33,027
社区成员




#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define m 4
int func(int src[][m], int f)
{
int cnt = 0;
int cur = 0;
int *table = (int *)malloc(sizeof(int) * f);
if (NULL == table)
return 0;
table[0] = -1;
while (cur >= 0)
{
table[cur] += 1;
if (table[cur] < m)
{
if (f - 1 == cur)
{
int i;
for (i = 0; i < f; ++i)
{
printf("%d ", src[i][table[i]]);
}
printf("\n");
++cnt;
}
else
{
cur += 1;//从下一个数组中取数
table[cur] = -1;
}
}
else
{
cur -= 1;//回溯
}
}
free(table);
return cnt;
}
int main()
{
//f个数组元素个数为m个的数组, f = sizeof(a) / sizeof(a[0]),如需再添加数组,直接在a里面添加就行了
int a[][m] =
{
{1, 2, 3, 4},//数组1
{5, 6, 7, 8},//数组1
{9, 10, 11, 12}//数组3
};
printf("共有%d中组合\n", func(a, sizeof(a) / sizeof(a[0])));
system("pause");
return 0;
}