九度 1120 全排列

深入理解数据库原理
以实战为基础,以数据库原理为基础,结合实战,深入理解数据库原理。
wangxiaoming
题目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
样例输出:
abc
acb
bac
bca
cab
cba
提示:

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



全排列问题,很多解法:

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

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

#include<iostream>
#include<algorithm>
#include<cstring>
#define Max 250
using 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;
}



wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值