[九度][何海濤]文字列のソート
5970 ワード
タイトルの説明:
文字列を入力し、その文字列のすべての配列を辞書順に印刷します.例えば文字列abcを入力すると、文字a,b,cで並べられるすべての文字列abc,acb,bac,bca,cab,cbaが印刷される.
入力:
各テストケースには1行が含まれます.
9を超えない文字列を入力します(文字が重複する可能性があります)、文字には大文字と小文字のみが含まれます.
出力:
各セットのデータに対応して、辞書順にすべての配列を出力します.
サンプル入力:
サンプル出力:
転載先:https://www.cnblogs.com/chkkch/archive/2012/11/21/2780757.html
文字列を入力し、その文字列のすべての配列を辞書順に印刷します.例えば文字列abcを入力すると、文字a,b,cで並べられるすべての文字列abc,acb,bac,bca,cab,cbaが印刷される.
入力:
各テストケースには1行が含まれます.
9を超えない文字列を入力します(文字が重複する可能性があります)、文字には大文字と小文字のみが含まれます.
出力:
各セットのデータに対応して、辞書順にすべての配列を出力します.
サンプル入力:
abc
BCA
サンプル出力:
abc
acb
bac
bca
cab
cba
ABC
ACB
BAC
BCA
CAB
CBA
, , , , 。 cout , printf, C 。
1 #include
2 #include <string>
3 #include
4 #include
5 #include
6 #include
7 using namespace std;
8
9 bool canUse[10];
10
11 void dfs(int dep, int maxDep, string &s, char ans[])
12 {
13 if (dep == maxDep)
14 {
15 ans[dep] = '\0';
16 printf("%s
", ans);
17 return;
18 }
19
20 for(int i = 0; i < maxDep; i++)
21 if (canUse[i])
22 {
23 if (i != 0 && s[i] == s[i-1] && canUse[i-1])
24 continue;
25
26 canUse[i] = false;
27 ans[dep] = s[i];
28 dfs(dep + 1, maxDep, s, ans);
29 canUse[i] = true;
30 }
31 }
32
33 int main()
34 {
35 string s;
36 while(cin >> s)
37 {
38 sort(s.begin(), s.end());
39 memset(canUse, true, sizeof(canUse));
40 char *ans = new char[s.size() + 1];
41 dfs(0, s.size(), s, ans);
42 delete [] ans;
43 }
44 }
転載先:https://www.cnblogs.com/chkkch/archive/2012/11/21/2780757.html