給出若干個(gè)字符串,給出一個(gè)排列,使排列后的字符串字典序最小。如"b","ba",則"bab"的字典序最小。
考慮用排序解決,但是不是按字典序排序。若strcat(A,B)<strcat(B,A),則A<B,按照此規(guī)則排序,最后順序輸出即可。
以下是我的代碼:
#include<stdio.h>
#include<string.h>
int cmp(char *s1,char *s2)


{
char t1[250],t2[250];
strcpy(t1,s1);strcat(t1,s2);
strcpy(t2,s2);strcat(t2,s1);
return strcmp(t1,t2);
}
int main()


{
long t,n,i,j,k;

char s[10][120]=
{0},tmp[120]=
{0};
FILE *fin,*fout;
fin=fopen("substring.in","r");
fout=fopen("substring.out","w");
fscanf(fin,"%ld",&t);
for(k=1;k<=t;k++)

{
fscanf(fin,"%ld",&n);
for(i=1;i<=n;i++)
fscanf(fin,"%s",s[i]);
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(cmp(s[i],s[j])>0)

{
strcpy(tmp,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],tmp);
}
for(i=1;i<=n;i++)
fprintf(fout,"%s",s[i]);
fprintf(fout,"\n");
}
fclose(fin);
fclose(fout);
return 0;
}
