从多个数组的每一个数组中挑选一个数,求出所有情况

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

如果在编码阶段就知道只有3个数组的话,用3个for循环很容易搞定。
现在的问题就是只用当程序运行起来后才知道会产生多少个数组,在这种情况下怎么获取所有的组合情况呢?
求高手指点!
...全文
423 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
tsmmst 2012-04-28
  • 打赏
  • 举报
回复
多谢,我也是用递归解决的!
[Quote=引用 1 楼 的回复:]

用递归是最简洁的。
C/C++ code

#define N 3
int 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++)
……
[/Quote]
瓶盒 2012-04-20
  • 打赏
  • 举报
回复
用递归是最简洁的。

#define N 3
int 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;
}

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧