例如,输入aabc,按字典顺序输出:
aabc
aacb
abac
abca
acab
acba
baac
baca
bcaa
caab
caba
cbaa
偶的代码如下:
#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;
}
正文
有重复元素的全排列输出2007-04-07 15:01:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/yzfy/24672.html
阅读(6930) | 评论(14)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论