算法:编程求打印N个元素中取M个的全组合(不限语言C/C++,Java,PHP,Python,Js,C#,VB,Perl,Ruby)

样例输入32#3个元素取2个123#3个数据样例输出121323==========样例输入33#3个元素取3个123#3个数据样例输出123==========样例输入... 样例输入
3 2 #3个元素取2个
1 2 3 #3个数据
样例输出
1 2
1 3
2 3
==========
样例输入
3 3 #3个元素取3个
1 2 3 #3个数据
样例输出
1 2 3
==========
样例输入
3 1 #3个元素取1个
1 2 3 #3个数据
样例输出
1
2
3
强调,是组合不是排列,不允许重复组合..
任一语言的实现。只要实现小规模的整型元素M在[0, 5]区间 ,N在[0, 5]区间就行
主要看算法
展开
 我来答
cpp_king
2011-12-21
知道答主
回答量:16
采纳率:0%
帮助的人:16.5万
展开全部
#include <iostream>
#include <algorithm>
using namespace std;

void printArray(int32_t a[], uint32_t len){
for(uint32_t i=0;i<len;i++) cout<<a[i]<<' ';
cout<<endl;
}
void combine(
int32_t a[], uint32_t a_len, uint32_t a_pos,
int32_t b[], uint32_t b_len, uint32_t b_pos)
{
if(b_pos>=b_len) printArray(b,b_len);
else for(uint32_t ai=a_pos; ai<a_len; ai++){
b[b_pos]=a[ai];
combine(a,a_len,ai+1,b,b_len,b_pos+1);
}
}

int main()
{
int32_t a[]= {1,2,3,4};
int32_t b[4];
uint32_t a_len=sizeof(a)/sizeof(int32_t);
for(uint32_t i=1;i<=a_len;i++){
cout <<a_len<<"选"<<i<<endl;
combine(a,a_len,0,b,i,0);
cout<<endl;
}

return 0;
}
============
4选1
1
2
3
4

4选2
1 2
1 3
1 4
2 3
2 4
3 4

4选3
1 2 3
1 2 4
1 3 4
2 3 4

4选4
1 2 3 4
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式