九度 1120 全排列

来源:互联网 发布:新浪发帖软件 编辑:程序博客网 时间:2024/04/30 00:11
题目1120:全排列

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:2575

解决:618

题目描述:

给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。
我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列。

输入:

输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。

输出:

输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:
已知S = s1s2...sk , T = t1t2...tk,则S < T 等价于,存在p (1 <= p <= k),使得
s1 = t1, s2 = t2, ..., sp - 1 = tp - 1, sp < tp成立。

样例输入:
abc
样例输出:
abcacbbacbcacabcba
提示:

每组样例输出结束后要再输出一个回车。



全排列问题,很多解法:

 =这里该处一种STL封装的函数解法:

这个是 去字符串全排列的STL解法,与本题有一定关系,也给出代码:

#include<iostream>#include<algorithm>#include<cstring>#define Max 250using namespace std;int main(){    char  str[Max];    while(cin>>str)    {        int l = strlen(str);        sort(str, str+l);        cout<<str<<endl;        while(next_permutation(str, str+l))        {            cout<<str<<endl;        }    }    return 0;}


这个是九度 1120 的代码,具体 :要求字母序小的排在前面,也就是说 当前字符串的 abc 下一个字符是 acb 

c 的字典序比 d 小

而且next_permutation 是按字母序生成 下一个 较大的序列 ,因此刚好符合题目条件

prev_permutation 刚好和他相反  对于 next_permutation 函数 将在下一篇博客给出数学推导


代码:

#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>using namespace std;int main(){    char str[7] ;    int l ;    while(scanf("%s", str) != EOF)    {         l = strlen(str);         do         {             printf("%s\n", str);         }while(next_permutation(str, str + l));         printf("\n");    }    return 0;}



0 0
原创粉丝点击