[Jobdu]タイトル1369:文字列の配列

6391 ワード

タイトルの説明:
文字列を入力し、その文字列のすべての配列を辞書順に印刷します.例えば文字列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 ****************************************************************/