组合的C语言实现

来源:互联网 发布:手机淘宝怎么买彩票 编辑:程序博客网 时间:2024/05/21 08:38
int combine(int a[],int sub){ //a[1..?]表示候选集,sub表示一个排列(组合)的元素个数 {    int total=sizeof(a);    int order[sub+1];    int count=0;//符合条件的排列(组合)的个数    order[0]=-1;    for(int i=1;i<=sub;i++)       order[i]=i;    int k=sub;    bool flag=true;    while(order[0]!=-1){       if(flag){          for(i=1;i<=sub;i++)//输出符合要求的组合             printf("%d ",a[order[i]]);          printf("\n");          count++;          flag=false;       }       order[k]++;       if(order[k]==total+1){          order[k--]=0;          continue;       }       //...       //在此加入order[k]的限制条件       //如果条件满足,则往下执行       //否则continue;       if(k<sub){          order[++k]=order[k-1];          continue;       }       if(k==sub)          flag=true;    }    return count; } 

原创粉丝点击