#include <stdio.h>
#include <string.h>
#define LEN sizeof(array)
void swap(char *sr,char ch,int a,int b);
int main()
{
char sr[128],as[26],temh,teme,temh1,teme1;
char array[][3] = {{'t', 's', 'f'}, {'a', 's', 'u'}, {'m', 'a', 'f'}, {'a', 'i', 'n'}, {'s', 'u', 'n'}, {'m', 'f', 'u'},
{'a', 't', 'h'}, {'t', 'h', 'i'}, {'h', 'i', 'f'}, {'m', 'h', 'f'}, {'a', 'u', 'n'}, {'m', 'a', 't'},
{'f', 'u', 'n'}, {'h', 's', 'n'}, {'a', 'i', 's'}, {'m', 's', 'n'}, {'m', 's', 'u'}};
//char array[][3]={{'d','e','f'},{'a','b','c'},{'b','d','e'},{'c','d','f'}};
//char array[][3]={{'c','d','e'},{'a','b','c'}};
int m,j=1,i;
char *p=&array[0][0];
memset(as,0,26);
sr[0]=array[0][0];
sr[1]=0;
/*将array里重复出现的字符去掉*/
while(j<LEN)
{
temh=p[j];
int fla=1;
i=0;
while(sr[i])
{
if(sr[i++]==temh)
{
fla=0;
break;
}
}
if(fla)
{
sr[i++]=temh;
sr[i]=0;
}
++j;
}
i=0;
j=strlen(sr)-1;
/*得到的数组sr通过array进行排序*/
while(i<j)
{
temh1=temh=sr[i];
teme1=teme=sr[j];
m=LEN/3;
while(m--)
{
for(int k=0;k<LEN;k+=3)
{
if(!(as[p[k]-'a']))
{
if(temh==p[k+1]||temh==p[k+2]) temh=p[k];
}
else if(!(as[p[k+1]-'a']))
{
if(temh==p[k+2]) temh=p[k+1];
}
if(!(as[p[k+2]-'a']))
{
if(teme==p[k]||teme==p[k+1])
teme=p[k+2];
}
else if(!(as[p[k+1]-'a']))
{
if(teme==p[k]) teme=p[k+1];
}
}
if(temh==temh1&&teme==teme1)
break;
temh1=temh;
teme1=teme;
}
int k=i,e=j;
while(temh!=sr[k]) ++k;
swap(sr,temh,k,i);
while(teme!=sr[e]) --e;
swap(sr,teme,e,j);
as[temh-'a']=1;
//标记
as[teme-'a']=1;
++i;
--j;
}
puts(sr);
return 0;
}
void swap(char *sr,char ch,int a,int b)
{
sr[a]=sr[b];
sr[b]=ch;
}
[此贴子已经被作者于2016-12-16 12:41编辑过]