题目

题目描述:
老李见和尚赢了自己的酒,但是自己还舍不得,所以就耍起了赖皮,对和尚说,光武不行,再来点文的。
你给我说出来1-8的全排序,我就让你喝,这次绝不耍你,你能帮帮和尚么?

输入描述:

输出描述:
1~8的全排列,按照全排列的顺序输出,每行结尾无空格。


解析

知识点

  • 就是一道STL的模板题:next_permutation。

操作

  1. 这里用到了算法类函数next_permutation,这个函数就是让一个排列变成全排列的下一项
  2. 对应的还有pre_permutation
  3. 这个函数是有返回值的,如果换得了(没到倒序排列),就返回true。换不了了(已经是倒序了),就返回false。
  4. 所以我们用这个性质,在循环的时候就放ta。

打代码

  1. 初始化string为12345678。
  2. 然后STL全排列输出每种情况。
  3. 下面全代码~


AC代码

#include <iostream>
#include <algorithm>
#include  <string>
using namespace std;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
//代码预处理区

int main() {
    IOS;
    string s = "12345678";
    do {
        for (int i = 0; i < 8; i++) {
            cout << s[i];
            if (i != 7) cout << " ";
        }
        cout << endl;
    } while (next_permutation(s.begin(), s.end()));
    return 0;
}
//函数区