http://blog.csdn.net/ohmygirl/article/details/7859497希望对你有帮助

解决方案 »

  1.   

    仅供参考#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",'A'+c1-comb[j]);
                printf("\n");
            }
        }
        return;
    }
    int main(int argc,char **argv) {
        if (argc<3) {
            printf("%s 组合下标 组合上标\n",argv[0]);
            return 1;
        }
        c1=atoi(argv[1]);
        if (c1<1 || MAX_NUM<c1) {
            printf("1<=组合下标<=%d\n",MAX_NUM);
            return 2;
        }
        c2=atoi(argv[2]);
        if (c2<1 || c1<c2) {
            printf("1<=组合上标<=组合下标\n");
            return 3;
        }
        comb[0]=c2;
        combination(c1,c2);
        return 0;
    }
      

  2.   

    你好!我将你的代码改成了C++,结果运行不对,只能输出单个字母的子集,请麻烦指出下是哪儿不对。程序如下:
    #include <iostream>
    using namespace std;#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", 'A' + c1 - comb[j]); printf("\n");
    }
    }
    return;
    }
    int main(int argc, char **argv) 
    {
    cout << "输入组合下标(大于等于1,小于等于26):";
    cin >> c1;
    cout << "输入组合上标(大于等于1,小于等于"<<c1<<":";
    cin >> c2; comb[0] = c2;
    combination(c1, c2); system("pause");
    return 0;
    }
    运行结果截图:
      

  3.   

    #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,",'a'+c1-comb[j]);
                printf("}\n{");
            }
        }
        return;
    }
    int main(int argc,char **argv) {
        for (c1=1;c1<6;c1++) {
            printf("-----%d----\n",c1);
            printf("{}\n{");
            for (c2=1;c2<=c1;c2++) {
                comb[0]=c2;
                combination(c1,c2);
            }
            printf("===========\n");
        }
        return 0;
    }
    //-----1----
    //{}
    //{a,}
    //{===========
    //-----2----
    //{}
    //{a,}
    //{b,}
    //{a,b,}
    //{===========
    //-----3----
    //{}
    //{a,}
    //{b,}
    //{c,}
    //{a,b,}
    //{a,c,}
    //{b,c,}
    //{a,b,c,}
    //{===========
    //-----4----
    //{}
    //{a,}
    //{b,}
    //{c,}
    //{d,}
    //{a,b,}
    //{a,c,}
    //{a,d,}
    //{b,c,}
    //{b,d,}
    //{c,d,}
    //{a,b,c,}
    //{a,b,d,}
    //{a,c,d,}
    //{b,c,d,}
    //{a,b,c,d,}
    //{===========
    //-----5----
    //{}
    //{a,}
    //{b,}
    //{c,}
    //{d,}
    //{e,}
    //{a,b,}
    //{a,c,}
    //{a,d,}
    //{a,e,}
    //{b,c,}
    //{b,d,}
    //{b,e,}
    //{c,d,}
    //{c,e,}
    //{d,e,}
    //{a,b,c,}
    //{a,b,d,}
    //{a,b,e,}
    //{a,c,d,}
    //{a,c,e,}
    //{a,d,e,}
    //{b,c,d,}
    //{b,c,e,}
    //{b,d,e,}
    //{c,d,e,}
    //{a,b,c,d,}
    //{a,b,c,e,}
    //{a,b,d,e,}
    //{a,c,d,e,}
    //{b,c,d,e,}
    //{a,b,c,d,e,}
    //{===========
    //