[Jobdu]タイトル1369:文字列の配列
6391 ワード
タイトルの説明:
文字列を入力し、その文字列のすべての配列を辞書順に印刷します.例えば文字列abcを入力すると、文字a,b,cで並べられるすべての文字列abc,acb,bac,bca,cab,cbaが印刷される.
入力:
各テストケースには1行が含まれます.
9を超えない文字列を入力します(文字が重複する可能性があります)、文字には大文字と小文字のみが含まれます.
出力:
各セットのデータに対応して、辞書順にすべての配列を出力します.
サンプル入力:
サンプル出力:
もう一度next_を復習しますpermutation、最後のテストデータ9ビットをcoutでタイムアウトし、肝心な時はprintfにしましょう.
文字列を入力し、その文字列のすべての配列を辞書順に印刷します.例えば文字列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
もう一度next_を復習しますpermutation、最後のテストデータ9ビットをcoutでタイムアウトし、肝心な時はprintfにしましょう.
1 #include <iostream>
2 #include <string>
3 #include <algorithm>
4 #include <cstdio>
5 using namespace std;
6
7 bool next_permutation(string &s) {
8 int n = s.length();
9 bool res = false;
10 if (n < 2) return res;
11 int a, b;
12 for (a = n - 2; a >= 0; --a) {
13 if (s[a] < s[a + 1]) {
14 res = true;
15 break;
16 }
17 }
18 for (b = n - 1; b > a; --b) {
19 if (s[a] < s[b]) {
20 break;
21 }
22 }
23 char tmp = s[a];
24 s[a] = s[b];
25 s[b] = tmp;
26 reverse(s.begin() + a + 1, s.end());
27 return res;
28 }
29
30 int main() {
31 string s;
32 while (cin >> s) {
33 sort(s.begin(), s.end());
34 do {
35 printf("%s
", s.c_str());
36 } while (next_permutation(s));
37 }
38 return 0;
39 }
40 /**************************************************************
41 Problem: 1369
42 User: hupo250
43 Language: C++
44 Result: Accepted
45 Time:150 ms
46 Memory:1520 kb
47 ****************************************************************/