嵌套实现输出排列组合

摘自CSDN:

原帖地址:

http://bbs.csdn.net/topics/380029281

#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 26
int comb[MAX_NUM];
int c1,c2;
void combination(int m, int n)
{
    int i, j;
    for (i = m; i >= n; i--){
        comb[n] = i;        /* 选择当前的“头”元素 */
        if (n > 1){
            /* 进入下一次更小的组合问题 */
            combination(i - 1, n - 1);
        }else{
            /* 满了需要的组合数,输出 */
            for (j = comb[0]; j > 0; j--){
                printf("%c", 65+c1-comb[j]);
            }
            printf("\n");
        }
    }
    return;
}
int main(int argc, char *argv[])
{
    if (argc<3) {
        printf("%s 组合下标 组合上标\n",argv[0]);
        return 0;
    }
    c1=atoi(argv[1]);
    if (c1<1||26<c1) {
        printf("1<=组合下标<=26\n");
        return 0;
    }
    c2=atoi(argv[2]);
    if (c2<1||c1<c2) {
        printf("1<=组合上标<=组合下标\n");
        return 0;
    }
    comb[0]=c2;
    combination(c1, c2);        /* C(4, 2) */
    return 0;
}

 

posted @ 2014-11-12 10:00  秋月的私语  阅读(175)  评论(0)    收藏  举报