#include"stdio.h"
#include"stdlib.h"
#include"string.h"
int count=0;
//第一种方法
void comb(int n, int r, int a[])
{ int i, ri;
ri=1;
a[1]=n+1;
while (a[1]>r-1)
{ a[ri]=a[ri]-1;
if (ri+a[ri]>=r+1)
if (ri==r)
{ for (int j=1; j<=r; j++)
printf("%d ", a[j]);
count++;
printf("\n");
}
else
{ a[ri+1]=a[ri];
ri=ri+1;
}
else
ri=ri-1;
}
}
//第二种方法
void comb1(int n, int r, int a[])
{ int i, ri;
ri=1;
a[1]=n;
while (a[1]>r-1)
if (ri<r)
{ if (ri+a[ri]>=r+1)
{ a[ri+1]=a[ri]-1;
ri=ri+1;
}
else
{ ri=ri-1;
a[ri]=a[ri]-1;
}
}
else
{ for (int j=1; j<=r; j++)
printf("%d ", a[j]);
count++;
printf("\n");
if (a[ri]>1)
a[ri]=a[ri]-1;
else
{ ri=ri-1;
a[ri]=a[ri]-1;
}
}
}
int main()
{
int n=5, r=3, a[20];
if (r>n)
printf("Input n, r error!\n");
else
{
comb(n, r, a);
printf("The total combinations are %d.\n",count);
count=0;
comb1(n, r, a);
printf("The total combinations are %d.\n",count);
}
}