# define MAXN 100
int a[MAXN]; //定位数组,用于指示选取元素集合数组的位置,选取元素集合数组0 起始
void comb(int m,int r)
{
int cur;//指示定位数组中哪个成员正在移进
unsigned int count=0;
//初始化定位数组,0 起始的位置 ,开始的选择必是位置 0,1,2
for(int i=0;i<r;i++)
a[i]=i;
cur=r-1;//当前是最后一个成员要移进
do{
if (a[cur]-cur<=m-r ){
count++;
for (int j=0;j<r;j++)
cout<<(a[j] + 1) << " ";
cout<<endl;
a[cur]++;
continue;
}
else{
if (cur==0){
cout<<count<<endl;
break;
}
a[--cur]++;
for(int i=1;i<r-cur;i++){
a[cur+i]=a[cur]+i;
}
if(a[cur]-cur<m-r)
cur=r-1;
}
}while (1);
}
调用方法如下:
comb(50, 3);