甜食爱好者 2017-02-28 11:22 采纳率: 25%
浏览 2489
已采纳

按字典序输出含有重复元素的字符串的全排列

这是做到的一道题
输入的每个字符串都是由小写字母组成的
对于输出是:输出输入字符串产生的所有排列,不能有重复的排列,而且按字典序输出,且每一种排列占一行。在每组连续的测试数据间输出空行。
测试了几组数据好像都是对的,但就是WA,不知道错在哪里了,下面是代码,各位可以帮忙看看吗?感激不尽!

 #include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

const int maxn = 1010;
char a[maxn];
bool flag = true;

int factorial(int n)
{
    int fact = 1;
    for(int i = 1; i <= n; i++)
    {
        fact = fact * i;
    }
    return fact;
}
void next_per(int n)
{
    int temp1 = -1, temp2 = -1;
    char min = 123;
    flag = true; 

    for(int i = n-2; i>=0; i--)
    {
        if(a[i] < a[i+1])
        {
            temp1 = i;
            break;
        }
    }
    if(temp1 == -1)
    {
        flag = false;
        return; 
    }
    for(int i = temp1 +1; i<n; i++)
    {
        if(a[i] > a[temp1] && a[i] < min)
        {
            temp2 = i;
            min = a[i];
        }   
    }
    swap(a[temp1],a[temp2]);
    sort(a+temp1+1,a+n);
}

int main()
{
    int cas, n;
    scanf("%d",&cas);

    while(cas)
    {
        scanf("%s",a);  
        n = strlen(a);  
        sort(a,a+n);    
        int fact = factorial(n);
        for(int i = 1; i<=fact; i++)
        {
            if(flag == true)
                printf("%s\n",a);
            next_per(n);
        }
        flag = true; 
        cas--;
        if(cas)
            printf("\n");

    }
    return 0;
}

  • 写回答

1条回答 默认 最新

  • devmiao 2017-02-28 15:10
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?