题目描述:
设整型数组A中有n个元素,输出从这n个数中取出的k个数的所有组合(k<=n)。例如:若A中存放的数是1,2,3,4,5,k为3,则输出结果应为:123,124,125,134,135,145,234,235,245,345
题目分析:
从数组A中选出K(本题中k=3)个元素,为了避免重复和泄漏,可分别求出包括A[0]和不包括A[0]的所有组合。即包括A[0]时,求出A[1...n]中取出k-1个数的所有组合,不包括A[0]时,求出A[1...n]中取出k个元素的所有组合。将这两种情况合到一起,就是最终的结果。
#include <stdio.h> int b[3]; int a[]={1,2,3,4,5}; void comb(int i,int j,int k) { if(k==0) { for(int m=0;m<3;m++) printf("%d",b[m]); printf("\n"); } else if(i+k-1<5) { b[j++]=a[i]; comb(i+1,j,k-1);//在里面了 comb(i+1,j-1,k);//不在里面了 } } int main() { comb(0,0,3); return 0; }
输出结果:
---------------我是华丽的分割线-----------------------------------------------------------------------------------------------------------------------------------
#include <stdio.h> int b[3]; int a[]={1,2,3,4,5}; void comb(int i,int j,int k) { if(k==0) { for(int m=0;m<3;m++) printf("%d",b[m]); printf("\n"); } else if(i-k+1>=0) { b[j++]=a[i]; comb(i-1,j,k-1);//在里面了 comb(i-1,j-1,k);//不在里面了 } } int main() { comb(4,0,3); return 0; }
输出结果: