POJ 1256 全排列函数

题目要求是按照给出的字母顺序进行全排列并非是ASCII的顺序 可以用STL的全排列函数 这道题可以对全排列函数有更深一步的理解 那就是构造cmp函数等同sort一样 给出明确的大小顺序就可以比较

#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int cmp(char a,char b)
{
    if(a>='a'&&b>='a')
    return a<b;
    if(a<='Z'&&b<='Z')
    return a<b;
    if(a>='a'&&b<='Z')
    return a<b+32;
    if(a<='Z'&&b>='a')
    return a+32<=b;
}
int main()
{
    char c[15];int len,t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s",c);
        len=strlen(c);
        sort(c,c+len,cmp);
        do
        puts(c);
        while(next_permutation(c,c+len,cmp));
    }
    return 0;
}
时间: 2024-08-07 14:40:50

POJ 1256 全排列函数的相关文章

【OJ】排列 n! STL函数next_permutation // Anagram / hzu.acmclub.com10317 / poj 1256

题目链接:点击打开链接 <pre name="code" class="cpp">/* 排列 n! poj1256 Anagram */ #include<iostream> #include<cstring> #include<cstdio> #include<cctype> #include<algorithm> using namespace std; bool cmp(char a,ch

C++ 全排列函数 std::next_permutation与std::prev_permutation

C++ STL中提供了std::next_permutation与std::prev_permutation可以获取数字或者是字符的全排列,其中std::next_permutation提供升序.std::prev_permutation提供降序. 1.std::next_permutation函数原型 template <class BidirectionalIterator> bool next_permutation (BidirectionalIterator first, Bidir

全排列的递归与非递归实现浅析

全排列问题在公司笔试的时候很常见,这里介绍其递归与非递归实现. 递归算法 1.算法简述 简单地说:就是第一个数分别以后面的数进行交换E.g:E = (a , b , c),则 prem(E)= a.perm(b,c)+ b.perm(a,c)+ c.perm(a,b)然后a.perm(b,c)= ab.perm(c)+ ac.perm(b)= abc + acb.依次递归进行. void swap(string &pszStr,int k,int m) { if(k==m) return ; c

十月百度,阿里巴巴,迅雷搜狗最新面试十一题

引言 当即早已进入10月份,十一过后,招聘,笔试,面试,求职渐趋火热.而在这一系列过程背后浮出的各大IT公司的笔试/面试题则蕴含着诸多思想与设计,细细把玩,思考一番亦能有不少收获. 上个月,本博客着重整理九月腾讯,创新工场,淘宝等公司最新面试十三题,此次重点整理百度,阿里巴巴,迅雷和搜索等公司最新的面试题.同上篇一样,答案望诸君共同讨论之,个人亦在慢慢思考解答.多谢. 最新面试十一题 十月百度:一个数组保存了N个结构,每个结构保存了一个坐标,结构间的坐标都不相同,请问如何找到指定坐标的结构(除了

求助——求解和为15的游戏棋盘问题

问题描述 publicclassGrid15{int[][]board;Grid15(){board=newint[3][3];}//输出棋盘的格线行privatevoidoutputGridRowBoard(){inti;System.out.print("+");for(i=0;i<5;i++){System.out.print("-");}System.out.println("+");}//输出棋盘的数据行(第i行,i只能为0.1或

算法题:poj 2752 Seek the Name, Seek the Fame(理解KMP的失配函数!)

链接: http://poj.org/problem?id=2752 题目大意: 给一个字符串S, 求出所有前缀pre,使得这个前缀也正好是S的后缀. 输出所有前缀的结束位置. 例如 "ababcababababcabab", 以下这些前缀也同时是S的后缀 ab  :  位置2 abab  : 位置4 ababcabab : 位置9 ababcababababcabab : 位置 18 分析与总结: 这题,关键在于对KMP的失配函数的理解.只要真正理解了,那么做出来完全不成问题. 下面

POJ 2105 IP Address (strtoll函数)

Time Limit: 1000MS Memory Limit: 30000K Description Suppose you are reading byte streams from any device, representing IP addresses. Your task is to convert a 32 characters long sequence of '1s' and '0s' (bits) to a dotted decimal format. A dotted de

POJ 3090 欧拉函数递推

题意:为多少个点与原点连线不经过其他点. 首先ans[1]=3,不经过其他点也就是(x,y)点的gcd(x,y)=1,也就是x,y,互素.所以就是每一行上的个数为phi(n)*2因为行和列都算上就是两倍关系. #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define maxn 1000008 long long

POJ 2773 欧拉函数

题意:让求从1开始第k个与m互素的数. 求最大公约数的第一步是用大数对小数取余.gcd(a,b)==gcd(a%b,b),进一步推出gcd(a,b)==gcd(a+b, b).也就是说,当求出了1~m间与m互质的数之后,把这些数加上m就可以得到m~2m间的与m互质的数.而且m~2m间不会有某个与m互质的数被漏掉.因为如果m<=a<=2m,且gcd(a, m)==1,那么gcd(a - m, m)必然等于1.也就是必然有个在1~m间的数a-m,可以通过加m的方式得到a.所以与m互质的数是有周期性