C++给定5个数,输出所有可能的组合

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;

}

弄个循环,其实就是穷举法了