正文

有重复元素的全排列输出2007-04-07 15:01:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yzfy/24672.html

分享到:

例如,输入aabc,按字典顺序输出:aabcaacbabacabcaacabacbabaacbacabcaacaabcabacbaa偶的代码如下:#include <stdio.h>int main(){    long nt,n1,n2,nLen;    char cIn[100],ct;    long nNum[100]={0};    scanf("%s",cIn); //输入字符串    {        char *pc=cIn,*pc2;        for(;*pc;pc++)for(pc2=pc+1;*pc2;pc2++)//排序,按ASCII            if(*pc>*pc2)ct=*pc,*pc=*pc2,*pc2=ct;        nLen=pc-cIn;        while(nNum[nLen]==0)        {            char cT[100],cOut[100]={0},*pcOut=cOut;            for(n1=0;n1<=nLen;n1++)cT[n1]=cIn[n1]; //取数初始化            for(n1=0;n1<nLen;n1++)            {                n2=nNum[nLen-n1-1]; //按排列数取数                if(n2>0 && cT[n2]==cT[n2-1])break; //防重复                *pcOut++=cT[n2];                for(nt=n2;nt<nLen;nt++)cT[nt]=cT[nt+1]; //删除已取元素            }            if(n1==nLen)printf("%s\n",cOut); //输出            long *pn=nNum+1;             for((*pn)++,n1=1;n1<nLen;n1++) //不等进制数加一并处理进位                if(*pn>n1)*pn++=0,(*pn)++;else break;        }    }    return 0;}

阅读(7008) | 评论(14)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册