/// 求从数组a[1..n]中任选m个元素的所有组合。
/// a[1..n]表示候选集,n为候选集大小,n>=m>0。
/// b[1..M]用来存储当前组合中的元素(这里存储的是元素下标),
/// 常量M表示满足条件的一个组合中元素的个数,M=m,这两个参数仅用来输出结果。
#include<stdio.h> void combin(int a[],int n,int m,int b[],int M) { int i; for(i = n;i>=m;i--) //循环确定每一轮的最大值,最大值的范围是n~m { b[m-] = i-; ) combin(a,i-,m-,b,M); //从n-1选取最大值,重复地一部 else { ;j<M;j++) printf("%4d",a[b[j]]); printf("\n"); } } } int main() { ]={,,,,}; ]; combin(a,,,b,); ; }