C++给定5个数,输出所有可能的组合,比如1、2、3、4、5,输出12345、23451等等,有没有什么巧妙的算法,如果数字长度任意呢?
http://blog.csdn.net/jfcat/article/details/8785865
我第一个想到的方法是四层循环
#include
#include
#include
#include
#include
using namespace std;
const char* GetString(const char* str, char ch)
{
static string s_str;
s_str.clear();
while (*str)
{
if (*str != ch)
{
s_str.push_back(*str);
}
++str;
}
return s_str.c_str();
}
void GetPermString(const string& str, vector& vec)
{
static string val;
if (str.length() == 1)
{
val += str;
vec.push_back(val);
val.pop_back();
return;
}
char ch = 0;
const char* q = NULL;
const char* p = str.c_str();
while (ch = *p++)
{
q = GetString(str.c_str(), ch);
val.push_back(ch);
GetPermString(q, vec);
val.pop_back();
}
}
int main(int argc, char* argv[])
{
vector vec;
GetPermString("123456", vec);
for (size_t i = 0; i < vec.size(); i++)
{
puts(vec[i].c_str());
}
system("pause");
return 0;
}
弄个循环,其实就是穷举法了