这个函数用来求C(n, k),其中comb就是二进制形式表示的子集,例如000111表示由后三个元素构成的组合或子集,并且该迭代过程可生成字典序递增的组合,这一特性非常有用。
当k为0时需要直接输出
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int k=2,n=5;
int comb = (1<<k) - 1;
while(comb < 1<<(n))
{
//printf("%d\n",comb);//先使用
int x = comb & -comb, y = comb + x;
comb = ((comb & ~y) / x >> 1) | y;
}
system("pause");
return 0;
}