从多个数组的每一个数组中挑选一个数,求出所有情况
一句话描述不清楚,意思是这样的,有一些数组,都不长,但是事先并不知道有多少个,比如
【1,2,3】
【1,5,6】
【7,9】
求出所有的组合情况,
117,119,157,159,167,169,217,219,317,319
如果在编码阶段就知道只有3个数组的话,用3个for循环很容易搞定。
现在的问题就是只用当程序运行起来后才知道会产生多少个数组,在这种情况下怎么获取所有的组合情况呢?
求高手指点!
[解决办法]
用递归是最简洁的。
#define N 3int data[8]={1,2,3,1,5,6,7,9};int *g_nResult;int **g_nSet;int g_nSizeSet[N]={3,3,2};//存储每个数组的大小void Recu(int n){ if(n==N){ for(int i=0;i<N;i++) printf("%d",g_nResult[i]); printf("\n"); return; } for(int k=0;k<g_nSizeSet[n];k++){ g_nResult[n]=g_nSet[n][k]; Recu(n+1); }};int main(){ g_nResult=new int[N]; g_nSet=new int*[N]; int nCount=0; for(int i=0;i<N;i++){ g_nSet[i]=new int[g_nSizeSet[i]]; memcpy(g_nSet[i],data+nCount,sizeof(int)*g_nSizeSet[i]); nCount+=g_nSizeSet[i]; } Recu(0); return 0;}