组合的C语言实现

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; 
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值