一个排列组合的算法问题

来源:百度知道 编辑:UC知道 时间:2024/05/06 02:31:19
求教:
1 2 3 4 四个数字 取3个数 要求不重复,结果存储在一个数组中a[4][3]的数组中
结果:
123;124;134;234;
数组a[][]的存储格式如下
| 1 2 3
------------------
1 | 1 2 3
2 | 1 2 4
3 | 1 3 4
4 | 2 3 4

希望能给出代码来 不胜感激

貌似是求组合的,现写了个比较简单的,可得出任意n选m的组合:

#include <stdio.h>
#include <stdlib.h>

void Print(int* beg, int* end)
{
while(beg != end)
printf("%d ", *beg++);
putchar('\n');
}

void C(int n, int m)
{
int i;
int *p, *x, *tb;

if(n == m)
{
for(i = 0; i < m; ++i)
printf("%d ", i + 1);
return;
}else if(m > n)
return;

p = (int*)malloc(sizeof(int) * m);

for(i = 1; i <= m; ++i)
p[i - 1] = i;

tb = p + m - 1;

do{
Print(p, p + m);
if(*tb < n)
++*tb;
else
{
while(*tb - *(tb - 1) <= 1)--tb;
--tb;
++*tb;
for(x = tb + 1; x != p + m; ++x)