題目描述:
輸入一行字符串,然后將字符串中的所有字符進行全排列,然后按照從小到大的順序輸出,每個輸出占一行。
輸入輸出示例:
輸入數據:
abc
輸出數據:
abc
acb
bac
bca
cab
cba
分析:
使用string來保存字符串,便于拆分和分割。使用vector來保存全排列的結果,便于操作和排序。
用戶輸入一個字符串str,程序的任務是對str求全排列,也就是求str[0]~str[length-1]的全排列
可以分為先求str的第一個字符str[0],然后求str[1]~str[length-1]的全排列,然后將str[0]分別插入到這些全排列的不同的位置中;
然后求str[1]~str[length-1]的全排列,有可以分成先求str[1],然后求str[2]~str[length-1]的全排列,然后將str[1]插入到不同的位置中;
由此得到遞歸,
求str[n]~str[length-1]的全排列,分為先求str[n-1]~str[length-1]的全排列,然后將str[n]分別插入到這個全排列的每個結果的所有的位置;
當n = length -1 的時候,找到遞歸的出口。
通過遞歸獲得str的全排列,然后通過stl中的sort函數,進行排序。
程序代碼:
#include<IOSTREAM>
#include
#include<VECTOR>
using namespace std;
vector<STRING> fun(string str)
{
vector<STRING> v;
if(str.length()==1) //遞歸的出口
{
v.push_back(str);
return v;
}
char c = str[0];
string x = str.substr(1);
vector<STRING> t = fun(x);
for(int i=0;i<T.SIZE();I++) cin str; string { main() int } v; return sort(v.begin(),v.end()); v.push_back(temp); temp="t[i].substr(0,j)+c+t[i].substr(j);" 將每一個字符串從j處分隔開,然后插入c 對于每一種排列情況,?見縫插針? t[i].length();j++) j="0;j<=" for(int n-1個字符的全排列》str;
vector<STRING> v;
v = fun(str);
vector<STRING>::iterator p;
for(p=v.begin();p<V.END();P++) { } return pre }< 0; cout《*p《endl;><BR>
<P></P>
?? 托福答案 www.qcwyo68.com