C++编写程序,输入数n,输出n个字符的全排列,通过函数递归实现。

例如:输入3,得到a、b、c三个字符的全排列为abc,acb,bac,bca,cab,cba。... 例如:输入3,得到a、b、c三个字符的全排列为abc,acb,bac,bca,cab,cba。 展开
 我来答
cqdjyy01234
2014-06-18 · TA获得超过1147个赞
知道小有建树答主
回答量:267
采纳率:50%
帮助的人:304万
展开全部
#include <string>
#include <vector>
#include <iostream>
using namespace std;

vector<string> do_permutation(string str){
    vector<string> res;
    if (str.size() > 1){
   丛灶     for (size_t i = 0; i != str.size(); ++i){
            string sub_str = str.substr(0, i) + str.substr(i + 1);
            vector<string> tmp = do_permutation(sub_str);
            for (size_t j = 0; j != tmp.size(); ++j){
                res.push_back(str[i] + tmp[j]);
            }
        }
    }
    else{
        res.push_back(str);
    }
    return res;
}

int main(){
    size_t n;
    cout << "n = ";
    if (cin >> n){
        string str;
        for (size_t i = 0; i != n; ++i){
            str += static_cast<char>('a' + i);
        }
        vector<string> res = do_permutation(str);
        for (size_t i = 0; i != res.size(); ++i){
       渗嫌扮     cout << res[i] << "\n";
        }
    }
    else{
        cerr << "输入有误\n";
   者孙 }
    
    return 0;
}

 

忽忽上升
推荐于2017-09-09 · TA获得超过1911个赞
知道小有建树答主
回答量:1166
采纳率:70%
帮助的人:574万
展开全部
#include <iostream>
using namespace std;

void  output(char d[],int n)       // 输出
{  
      for (int i=0;i<n;i++)
        cout<<d[i];   
  cout<<" ";
}
void swap(char &x, char &y)  //交换
{
char t = x;
x = y;
y = t;
}
void perm(char d[],int n,int j)  //  j起始下标
{
     if (j==n)
    瞎盯 磨樱和      output(d,n);                  // 输出
 else
         for (int i=j;i<n;i++) {
               if (i!=j)
                  swap(d[j],d[i]);     // 交换
   颂蠢            perm(d,n,j+1);    //递归求排列
               if (i!=j)
                  swap(d[j],d[i]);}    //  恢复 
}

int main()
{
char a[] = {'a','b','c','d','e','f','g','h','i','j','k','l',
'm','n','o','p','q','r','s','t','u','v','w','x','y','z'};
int n;
cout<<"请输入n:\n";
cin>>n;
perm(a,n,0);
cout<<endl;
system("pause");
return 0;
}

算法:1.将第一个字符,依次与后n-1个字符交换值,每次交换得到一个新的首字母;
           2.剩下的n-1个字母按1步骤重复直至所有数组完成排列;

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式