正文

组合2007-07-21 00:26:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lingdlz/27673.html

分享到:

题目描述:列出C(a,b)的所有组合 输入:多组测试数据,每组一行有两个数字a和b(1<=b<a<=30)输入的a=b=0的时候结束。 输出:输出从1到a的数中选出b个数的所有组合,一行输出一个组合,每个组合里的数从小到大排列,各组之间按字典顺序从小到大排列。 样例输入:5 20 0 样例输出:1 21 31 41 52 32 42 53 43 54 5 #include <stdio.h> void putout(int s[],int b){ int i; for(i=1; i < b; i++)  printf("%d ",s[i]); printf("%d\n",s[i]);} int main(){ int a,b,s[32],i; while(scanf("%d %d",&a,&b)!=EOF){  if(a==0 && b==0)   break;  for(s[0]=i=1; i<=b; i++)   s[i]=i;  for(i--; i>0; ){   if(i==b)    putout(s,b);   if(s[i]+1+b-i > a){    if(i==1)     break;    for(;i>1 && s[i-1]+2+b-i>a;i--)     ;    if(i==1)     continue;    for(s[i-1]++; i<=b; i++)     s[i]=s[i-1]+1;    i--;   }   else if(i==1){    for(s[i]++,i=2; s[i-1]<=a && i<=b; i++)     s[i]=s[i-1]+1;    if(i <= b)     break;    i--;   }   else{    s[i]++;    if(i<b)     i++;   }  }          } return 0;   }  

阅读(2638) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册