1 2 3 4打印所有的数字组合
1
2
3
4
1 2
1 3
1 4
2 3
2 4
3 4
1 2 3
1 3 4
2 3 4
1 2 3 4
#include <iostream>
#include <vector>
using namespace std;
vector<int> result;
void combination(int a[],int number,int index=0)
{
if(number==0)//如果递归到深层时,到最后交换的元素即时最后一个元素时就打印出来
{
vector<int>::iterator iter = result.begin();
for(; iter < result.end(); ++ iter)
cout<<*iter<<" ";
cout<<endl;
return ;
}
if(index>=4)
return;
result.push_back(a[index]);
combination(a,number-1,index+1);
result.pop_back();
combination(a,number,index+1);
}
int main()
{
int a[4]={1,2,3,4};
for(int i=1;i<=4;i++)
combination(a,i);
system("pause");
return 0;
}
字符串版如下:
#include <iostream>
#include <vector>
using namespace std;
vector<char> result;
void combination(char *a,int number)
{
if(number==0)
{
vector<char>::iterator iter = result.begin();
for(; iter < result.end(); ++ iter)
cout<<*iter<<" ";
cout<<endl;
return ;
}
if(*a == '\0')
return;
result.push_back(*a);
combination(a+1,number-1);
result.pop_back();
combination(a+1,number);
}
int main()
{
char * string="1234";
for(int i=1;i<=4;i++)
combination(string,i);
system("pause");
return 0;
}
本文介绍了一个使用C++实现的算法,该算法能够生成指定数字的所有可能组合。通过递归方式,实现了从单个数字到所有数字组成的组合的输出,包括字符串版的实现。
1283

被折叠的 条评论
为什么被折叠?



