输出1,2,3,..,n的所有组合数

 

[面试常见题系列]:输出1,2,3,..,n的所有组合数

思路:递归算法
从开始往后递增地写数字,当前从now值开始,存储的位置从cur开始,
则显然加上,now..n,都是新的组合数,对于每一个,{ 输出之,然后递归,处理 _c(n, cur+1, a, i+1) }

/* 输出1,2,3,..,n的组合数 */

#include 
<stdio.h>
#include 
<assert.h>
#include 
<malloc.h>

void c(int n)
{
    
extern void _c(int n, int cur, int *a, int now);
    
int *a;
    a 
= (int *) malloc(n * sizeof(int));
    assert(a 
!= NULL);
    _c(n, 
0, a, 1);
    free(a);
}

void _c(int n, int cur, int *a, int now)
{
    
int i,j;
    
for (i=now; i<=n; i++)
    {
        a[cur] 
= i;

        
for (j=0; j<=cur; j++)
        {
            printf(
"%d ", a[j]);
        }
        printf(
"\n");

        _c(n, cur
+1, a, i+1);
    }
}

int main()
{
    c(
3);
}

posted on 2009-03-19 12:52  庄冠华  阅读(737)  评论(1编辑  收藏  举报

导航