首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

从多个数组的每一个数组中挑选一个数,求出所有情况,该如何解决

2012-05-01 
从多个数组的每一个数组中挑选一个数,求出所有情况一句话描述不清楚,意思是这样的,有一些数组,都不长,但是

从多个数组的每一个数组中挑选一个数,求出所有情况
一句话描述不清楚,意思是这样的,有一些数组,都不长,但是事先并不知道有多少个,比如
【1,2,3】
【1,5,6】
【7,9】
求出所有的组合情况,
117,119,157,159,167,169,217,219,317,319

如果在编码阶段就知道只有3个数组的话,用3个for循环很容易搞定。
现在的问题就是只用当程序运行起来后才知道会产生多少个数组,在这种情况下怎么获取所有的组合情况呢?
求高手指点!

[解决办法]
用递归是最简洁的。

C/C++ code
#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;} 

热点排行