uva10098 - Generating Fast(快速生成有序排列)

还是题意理解不清,导致wa了2次,

题意理解了就好做了,几乎是照抄课本上的代码, 没意思:!

方法一:

生成可重集的排列:

代码如下:

#include 
#include 
#include 
using namespace std;
char s[15];
void printf_permutation(int n, char *flag, int cur)
{
    if(n==cur)
    {
        for(int i = 0; i < n; i++)
        printf("%c",flag[i]);
        printf("\n");
        return;
    }
    for(int i = 0; i < n; i++)if(!i||s[i]!=s[i-1])
    {
        int c1 = 0, c2 = 0;
        for(int j = 0; j < cur; j++)
        if(flag[j]==s[i])c1++;
        for(int j = 0; j < n; j++)
        if(s[j]==s[i])c2++;
        if(c1
方法二:

利用STL中的库函数-next_permutation()

代码如下:

#include 
#include 
#include 
using namespace std;
int main ()
{
    int n;
    char p[15];
    scanf("%d",&n);
    while(n--)
    {
        scanf("%s",p);
        int len = strlen(p);
        sort(p,p+len);
        do
        {
            printf("%s\n",p);
        }
        while(next_permutation(p,p+len));
        puts("");
    }
    return 0;
}



你可能感兴趣的:(uva)