藍橋杯-從串中取三個不同字元

kewlgrl發表於2017-01-13

取字元

從標準輸入讀入一個由字母構成的串(不大於30個字元)。
從該串中取出3個不重複的字元,求所有的取法。
取出的字元,要求按字母升序排列成一個串。
不同的取法輸出順序可以不考慮。

例如:
輸入:
abc
則輸出:
abc

輸入:
abcd
則輸出:
abc
abd
acd
bcd

輸入:
abcaa
則輸出:
abc

解題思路:

利用set不儲存相同元素的特性來去重,然後用三重迴圈輸出3個不重複的字元。


#include <iostream>
#include <cstring>
#include <cstdio>
#include <set>
#include <algorithm>
using namespace std;
set<char> s;
char c[30],str[30];//原始串和去重後的串
int j=0;

int main()
{
    cin>>c;//讀取原始串
    for(int i=0; i<strlen(c); ++i)
        s.insert(c[i]);//插入set去重
    set<char>::iterator iter;
    for(iter = s.begin(); iter!=s.end(); ++iter)
        str[j++]=*iter;
    for(int i=0; i<strlen(str); ++i)//三重迴圈輸出3個不重複的字元
        for(int j=i+1; j<strlen(str); ++j)
            for(int k=j+1; k<strlen(str); ++k)
                cout<<str[i]<<str[j]<<str[k]<<endl;
    return 0;
}
/*
abc
abcd
abcaa
*/


相關文章