void getn(int a[], int b[] , int m, int n, int index,int lastindex)
{
int i = lastindex + 1;
if(index == n )
{
int x;
for(x = 0 ; x < n ;x ++)
{
printf(" %d ",a[b[x]]);
}
printf("\n");
return ;
}
while( i < m)
{
b[index] = i;
getn(a,b,m,n,index + 1,i);
i ++ ;
}
}
void agen(int a[],int m, int n) /* from m get n */
{
int i ,j ;
int b[100] = {0}; /* big then n */
i = j = 0;
while(b[0] < m ) {
while( i < m) {
if(j == n - 1 ) {
int x ;
for( x = 0 ; x < n ; x ++) {
printf(" %d ",a[b[x]]);
}
printf("\n");
} else {
j ++;
}
i ++;
b[j] = i;
}
do {
j --;
b[j] ++ ;
} while(b[j] >= m );
i = b[j] ;
}
}
int main()
{
int a[10] = {0, 1,2,3,4,5,6,7,8,9};
int b[20] ={0};
getn(a,b,10,5,0,-1);
agen(a,10,5);
return 0;
}