怎么输出几组数的所有组合?

GoonYangXiaofang 2010-03-13 11:35:30
给几组数,怎么得到所有组合?
比如有三组数:
1 2
5 0
6 1 8
应输出:
1 5 6
1 5 1
1 5 8
1 0 6
1 0 1
1 0 8
2 5 6
2 5 1
2 5 8
2 0 6
2 0 1
2 0 8
共12个结果。

求助。
...全文
343 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mstlq 2010-03-14
  • 打赏
  • 举报
回复
任意?
好吧,任意……

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
typedef vector<vector<int> >::iterator viit;
void outputs(viit begin,viit cur, viit end, vector<int> &result)
{
if(cur==end) {
for(vector<int>::iterator iter=result.begin(); iter!=result.end(); ++iter)
cout<<*iter<<"\t";
cout<<endl;
} else {
for(vector<int>::iterator iter=(*cur).begin(); iter!=(*cur).end(); ++iter) {
result[cur-begin]=*iter;
outputs(begin,cur+1,end,result);
}
}
}

int main()
{
int i1[2]= {1,2};
int i2[2]= {5,0};
int i3[3]= {6,1,8};
vector<vector<int> > datas(3);
datas[0].assign(i1,i1+2);
datas[1].assign(i2,i2+2);
datas[2].assign(i3,i3+3);
vector<int> output(datas.size());

outputs(datas.begin(),datas.begin(),datas.end(),output);
}
SammyLan 2010-03-14
  • 打赏
  • 举报
回复
void CombEx(vector<vector<int> > & vec,int N,vector<int> &tmp)
{
for(int i = 0;i<vec[N].size();++i)
{
tmp.push_back(vec[N][i]);
if (N<vec.size()-1)
{
CombEx(vec,N+1,tmp);
}
else{
for (int i = 0;i<tmp.size();++i)
{
cout<<tmp[i]<<" ";
}
cout<<endl;
}
tmp.pop_back();

}
}

void Comb(vector<vector<int> > & vec )
{
vector<int> tmp;
CombEx(vec,0,tmp);
}

int main()
{
int vec1[]={1 ,2};
int vec2[]={5, 0};
int vec3[]={ 6, 1, 8};
vector<vector<int> > vec;
vec.push_back(vector<int>(vec1,vec1+sizeof(vec1)/sizeof(vec1[0])));
vec.push_back(vector<int>(vec2,vec2+sizeof(vec2)/sizeof(vec2[0])));
vec.push_back(vector<int>(vec3,vec3+sizeof(vec3)/sizeof(vec3[0])));
Comb(vec);
return 0;
}
GoonYangXiaofang 2010-03-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 kuillldan 的回复:]
C/C++ code
void main()
{
const int a_len = 3;
const int b_len = 2;
const int c_len = 3;

int a[a_len] = {1,5,8};
int b[b_len] = {2,5};
int c[c_len] = {2,3,5};

f……
[/Quote]
数据是任意的。组数及每组的元素个数都是任意的。
kuillldan 2010-03-13
  • 打赏
  • 举报
回复
void main()
{
const int a_len = 3;
const int b_len = 2;
const int c_len = 3;

int a[a_len] = {1,5,8};
int b[b_len] = {2,5};
int c[c_len] = {2,3,5};

for(int i = 0; i<a_len; i++)
for(int j = 0; j < b_len; j++)
for(int k = 0; k < c_len; k++)
cout<<a[i]<<' '<<b[j]<<' '<<c[k]<<endl;
}
GoonYangXiaofang 2010-03-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 stardust20 的回复:]
哈。。一个想法

C/C++ code
#include <iostream>
using namespace std;
int main()
{
int a0[2]={1,2};
int a1[2]={5,0};
int a2[3]={6,1,8};
for (int i=0; i < 0xf; i++)
{
if ……
[/Quote]
数据是任意的。
GoonYangXiaofang 2010-03-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mstlq 的回复:]
楼主可以用递归……
[/Quote]
是的。但是没有实现出来。
stardust20 2010-03-13
  • 打赏
  • 举报
回复
哈。。一个想法
#include <iostream>
using namespace std;
int main()
{
int a0[2]={1,2};
int a1[2]={5,0};
int a2[3]={6,1,8};
for (int i=0; i < 0xf; i++)
{
if (int(i&0x3) != 3)
{
cout<<' '<<a0[(i>>3)]<<' '<<a1[(i&0x7)>>2]<<' '<<a2[(i&0x3)]<<endl;
}

}
return 0;
}
jiaguang3010717 2010-03-13
  • 打赏
  • 举报
回复
用递归,支持
mstlq 2010-03-13
  • 打赏
  • 举报
回复
楼主可以用递归……
GoonYangXiaofang 2010-03-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fox000002 的回复:]
三层循环嵌套一下即可
[/Quote]

组数是任意的。3组只是一个例子。
fox000002 2010-03-13
  • 打赏
  • 举报
回复
三层循环嵌套一下即可

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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