算法说明:从n个数中选m个数,可以分解为以下两步
(1)首先从n个数中选取编号最大的数,然后在剩下的n-1个数中选取m-1个数,直到从n-(m-1)个数中选取1个数为止。
(2)从n个数中选取编号次小的一个数,继续执行第(1)步,直到当前可选编号最大的数为m。
1 #include<stdio.h> 2 3 void com(int a[],int n,int m,int b[],const int M) 4 { 5 int i,j; 6 for(i=n;i>=m;i--) 7 { 8 b[m-1]=i-1; 9 if(m>1) 10 { 11 com(a,i-1,m-1,b,M); 12 } 13 else 14 { 15 for(j=M-1;j>=0;j--) 16 { 17 printf("%d ",a[b[j]]); 18 } 19 printf(" "); 20 } 21 } 22 }