【考研每日一題34】全排列(C++)

原題地址:牛客網

題目描述

給定一個由不同的小寫字母組成的字符串,輸出這個字符串的所有全排列。 我們假設對於小寫字母有'a' < 'b' < ... < 'y' < 'z',而且給定的字符串中的字母已經按照從小到大的順序排列。

輸入描述:

輸入只有一行,是一個由不同的小寫字母組成的字符串,已知字符串的長度在1到6之間。

輸出描述:

輸出這個字符串的所有排列方式,每行一個排列。要求字母序比較小的排列在前面。字母序如下定義:
已知S = s1s2...sk , T = t1t2...tk,則S < T 等價於,存在p (1 <= p <= k),使得
s1 = t1, s2 = t2, ..., sp - 1 = tp - 1, sp < tp成立。

每組樣例輸出結束後要再輸出一個回車。

示例1

輸入

abc

輸出

abc
acb
bac
bca
cab
cba

分析:

用STL的全排列函數即可。坑點在於每個樣例輸出完都要換一行,但是如果你每次換一行的寫,自測是不會通過的。所以不要管自測結果,直接提交。

代碼:

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
    string b;
    while(cin>>b)
    {
        char a[7];
        int h=b.length();
        for(int i=0;i<h;i++)
        {
            a[i]=b[i];
        }
        sort(a,a+h);
        do{
            for(int i=0;i<h;i++)
            {
                cout<<a[i];
            }
            cout<<endl;
        }while(next_permutation(a,a+h));
        cout<<endl;
    }
    return 0;
}

2020.4.22

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章