关于permutation
根据翻译:置换(Permutation)是古典密码中另一种基本的处理技巧,就是将明文中的字母重新排 列,字母本身不变,只是改变其位置。(此处翻译来自有道)
我们之前学习过程中不是经常会遇到那种什么按照字典序求个全排列的问题吗,next_permutation就直接提供了解题的工具,这不是就直接秒杀了。
函数原型
bool next_permutation(interator start, interator end)
(其实还有一个prev_permutation,用法和这个一样,求的是上一个排列)
此外,next_permutation还有自定义排序方式
bool next_permutation(interator start, interator end ,int cmp)
其中 cmp就是排序的方式
举个栗子(PTA)
给定一个全由小写字母构成的字符串,求它的全排列,按照字典序从小到大输出。
输入格式:
一行,一个字符串,长度不大于8。
输出格式:
输出所有全排列,每行一种排列形式,字典序从小到大。
输入样例:
在这里给出一组输入。例如:
abc
结尾无空行
输出样例:
在这里给出相应的输出。例如:
abc
acb
bac
bca
cab
cba
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
char s[20];
cin >> s;
int n = strlen(s);
sort(s, s + n);
do{
for (int i = 0; i < n; i ++)
cout << s[i];
cout << endl;
}while(next_permutation(s, s + n));
system("pause");
return 0;
}
我这里也只是蜻蜓点水的讲了这个函数,之前看到一篇不错的文章,可以去膜拜一下大佬next_permutation(a,a+n)_如梦山河的博客-CSDN博客_next_permutation