ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法训练营 训练 字谜(next_permutation函数)

2022-02-08 11:30:40  阅读:177  来源: 互联网

标签:abc tolower int 字母 next 单词 小写字母 permutation 字谜


题目描述

写程序从一组给定的字母中生成所有可能的单词。例如,给定单词“abc”,应该输出“abc”、“acb”、“bac”、“bca”、“cab”和“cba”。在输入的单词中,某些字母可能会出现多次。对于给定的单词,程序不应多次生成同一个单词,并且这些单词应按字母升序输出。

输入:输入由几个单词组成。第1行包含一个数字,表示单词数。以下每行各包含一个单词。单词由a到z的大小写字母组成。大小写字母应被视为不同。每个单词的长度都小于13。

输出:对于输入中的每个单词,输出应该包含所有可以用给定单词的字母生产的不同单词。由同一输入词生成的词应按字母升序输出。大写字母在对应的小写字母之前

算法设计

大写字母在相应小写字母之前,所需正确的字母顺序是A<a<B<b…<Z<z。需要自定义优先级函数,然后使用全排序next_permutation函数。

#include <algorithm>
#include <string>
#include <iostream>
using namespace std;
int cmp(char a,char b);//优先级函数
int main() {
    string ch;
    int n;
    (cin >> n).get();
    while(n--){
        (cin >> ch).get();
        sort(ch.begin(),ch.end(),cmp);
        do{
            cout << ch <<endl;
        }while(next_permutation(ch.begin(),ch.end(),cmp));
    }
    cout << endl;
    return 0;
}
int cmp(char a,char b){
    if(tolower(a) != tolower(b)){//小写转换函数
        return tolower(a) < tolower(b);
    }
    else{
        return a < b;
    }
}

优先级定义函数中tolower()函数详解:
原型:int tolower(int c)
说明:如果c为小写英文字母,则返回对应的大写字母;否则返回原来的值。

输入:

3
aAb
abc
acba

输出:

Aab
Aba
aAb
abA
bAa
baA
abc
acb
bac
bca
cab
cba
aabc
aacb
abac
abca
acab
acba
baac
baca
bcaa
caab
caba
cbaa

标签:abc,tolower,int,字母,next,单词,小写字母,permutation,字谜
来源: https://blog.csdn.net/qq_20144897/article/details/122819952

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有