poj 1256/1732/1833/1146 C++stl全排列

今天一口气做了关于全排列的4道题目,把这些放到这里,总结一下~

poj 1256 输出全排序,取出全排序中重复的

poj 1732 输出全排列

poj 1833 输出某个序列后的第几个全排序

poj 1146 输出某个序列后的全排列,无输出No Successor

 

poj 1731主要的代码如下

 

  • Source Code
  • #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #define N 201
    using namespace std;
    
    char str[N];
    
    int f(char x)
    {
    	if(x>='a' && x<='z') return (x-'a'+1)*2;
    	else return (x-'A')*2+1;
    }
    
    bool cmp(char x, char y)
    {
    	return f(x)<f(y);
    }
    
    int main()
    {
    	
    	cin>>str;
    	int n=strlen(str);
    	sort(str,str+n,cmp);
    	do {
    		cout<<str<<endl;
    	}while( next_permutation(str,str+strlen(str),cmp) );
    
    
    	return 0;
    }

主要就是使用next_permutation函数~可以轻松解决,算是4道水题,不过练手了~

你可能感兴趣的:(poj 1256/1732/1833/1146 C++stl全排列)