poj 1256 按一定顺序输出全排列(next_permutation)

Sample Input

3
aAb
abc
acba
Sample Output

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

对字符串进行全排列,字符的大小规则: ‘A‘<‘a‘<‘B‘<‘b‘<...<‘Z‘<‘z‘.

 1 # include <iostream>
 2 # include <cstring>
 3 # include <algorithm>
 4 using namespace std;
 5
 6
 7 bool cmp(const char &a, const char &b)
 8    {
 9     if (tolower(a) == tolower(b))  //把字符转换成小写字母,非字母字符不做出处理
10    {
11        return a < b;
12     }
13     else
14        return tolower(a) < tolower(b);
15
16 }
17
18 int main()
19 {
20     int num = 0;
21     cin >> num;
22     while(num--)
23     {
24         char str[100];
25         cin >> str;
26         int length = strlen(str);
27         sort(str, str+length, cmp);
28         cout << str << endl;
29         while(next_permutation(str, str + length, cmp))  //全排列
30         {
31             cout << str << endl;
32         }
33     }
34     return 0;
35 }  

时间: 2024-10-30 06:52:30

poj 1256 按一定顺序输出全排列(next_permutation)的相关文章

[2016-01-19][POJ][1256]

时间:2016-01-19  13:41:17  星期二 题目编号:POJ 1256 题目大意:给出一个word,求word组成字母的全排列,并输出 要求 输出顺序按字母顺序 字母顺序为 'A'<'a'<'B'<'b'<...<'Z'<'z' 方法: 通过上面的字母顺序构造一个cmp函数 先对原来的word进行重新排序 然后 用 next_permutation 进行生成后续排列,边生成边输出即可 解题过程遇到问题: next_permutation() 有第三个参数 

【C语言】用指针数组完成:将若干字符串安字母顺序输出

//用指针数组完成:将若干字符串安字母顺序输出 #include <stdio.h> #include <string.h> void print(char * name[],int n) //char * name[],指针数组,每个数组元素是一个char*(即字符串)类型 { int i; for(i=0;i<n;i++) { printf("%s\n",name[i]); } } void sort(char *name[],int n) { cha

编程题:指针数组实现,将多个字符串按字母顺序输出。

#include<stdio.h> void sort(char *str[],int n) { char *temp;int i,j,k; for(i=0;i<n-1;i++) {k=1; for(j=i+1;j<n;j++) if(strcmp(str[k],str[j])>0) k=j; if(k!=i) {temp=str[i];str[i]=str[k];str[k]=temp;} } } void main() { int i,n=4; char *string[

编程题:指针变量作函数参数,将两个整数按由大到小的顺序输出。

分析:通过指针变量作函数参数,无需返回值和全局变量,主调函数就可以使用被调用函数改变的值. #include<stdio.h> void swap(int *p1,int *p2) { int p; p=*p1; *p1=*p2; *p2=p; } void main() { int a=3,b=4; int *ptr1,*ptr2; ptr1=&a;ptr2=&b; if(a<b) swap(ptr1,ptr2); printf("%d,%d\n",

c语言:输入4个整数,要求按从小到大的顺序输出。

输入4个整数,要求按从小到大的顺序输出. 解:程序: #include<stdio.h> int main() { int t,a,b,c,d; printf("请输入4个数:"); scanf("%d,%d,%d,%d",&a,&b,&c,&d); if (a > b) { t = a; a = b; b = t; } if (a > c) { t = a; a = c; c = t; } if (a >

poj 2337 之 有向图 欧拉路径输出

/* poj 2337 之 有向图 欧拉路径输出  每个单词看作一条有向边,顶点即为单词首尾字母,然后求欧拉路径即可. 1)为保证字典序,先对单词按字典序排序 2)深搜,输出单词序列 */ 1 #include <iostream> 2 #include <fstream> 3 #include <sstream> 4 #include <cstdlib> 5 #include <cstdio> 6 #include <cstddef>

任意输入三个整数,按从大到小的顺序输出

#include <stdio.h> void main(){ int a,b,c,t; printf("请输入三个整数:\n"); scanf("%d,%d,%d",&a,&b,&c); if(a<b) { t=a; a=b; b=t; } if(a<c) { t=a; a=c; c=t; } if(b<c) { t=b; b=c; c=t; } printf("从大到小的排序为:%d,%d,%d&q

顺序输出其中的元音字母

题目描述 写一函数,将两个字符串中的元音字母复制到另一个字符串,然后输出. 输入 一行字符串 输出 顺序输出其中的元音字母(aeiou) 样例输入 abcde 样例输出 ae #include <iostream>#include <string.h>using namespace std;int main(){ int c,i; char a[1000]; gets(a); c=strlen(a); for(i=0;i<c;i++)  if(a[i]=='a'||a[i]=

稍微复杂的sql逻辑(从数据库逆序查找有限条记录(limit))并按相反顺序输出

项目中有一个业务需求是:默认加载15条历史记录(按时间顺序从早到晚). 下面是我构造的sql逻辑,mark一下,亲测可行. SELECT * FROM (SELECT *FROM group_chatmsg_v WHERE ((group_Id=46 AND send_user_id=28 AND receive_user_id=70) OR (group_Id=46 AND receive_user_id=28 AND STATUS=1)) AND is_delete =0 ORDER BY