TOJ 2960.VECI-- next_permutation

题意

题意很明确,就是给定一个整数, 1X999999 ,然后求出比N 大的并且与N 具有相同的数字组成的数。若不存在则输出0

INPUT
156
330
27711

OUTPUT
165
0
71127

思路

可以等价为 求这个数的下一个排列;
C++ STL的一个库函数next_permutation() 要方便很多。
下面简单介绍一下:
STL中的 next_permutation() 可以直接求出下一个排列
使用:bool next_permutation(_Biter,_Biter,[compaer) 参数就与sort()一样,若不存在下一个排列,则返回 false,反之为true,并且对_biter 做出修改;

例如:

对序列 {a, b,c},按照字典序列,固定a之后,a比bc都小,c比b大,它的下一个序列即为{a, c, b},而{a, c, b}的上一个序列即为{a, b, c},同理可以推出所有的六个序列为:{a, b, c}、{a, c, b}、{b, a, c}、{b, c, a}、{c, a, b}、{c, b, a},其中{a, b, c}没有上一个元素,{c, b, a}没有下一个元素。

同样数字一样,其实第三个参数,就是compare, 只要可以比较的数据类型,包括 自定义类, 都可以使用这个函数来求得下一个排列。
同样:除了有下一个排列之外,也有上一个排列函数pre_permutation(),用法完全一样;

代码

#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;

int main()
{
   char x[10];
   while(cin>>x)
   {
        if(next_permutation(x,x+strlen(x)))
        cout<<x<<endl;
        else cout<<0<<endl;
   }
}next_permutation()

你可能感兴趣的:(STl-下一个排列)