[C ++]关于next_permutation

 

 关于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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值