题目要求输出的组合字符串具有最小字典序,其实就是把题目给出的字符串进行排序。考虑输入只有两个字符串s1和s2的情况,要输出s1和s2组合的最小字典序,只需要比较s1+s2和s2+s1这两个字符串哪个的字典序更小即可。扩展到多个字符串的情况也是一样的。
#include <stdio.h>
#include <string.h>
int main()
{
int t,n;
int i,j,k;
char str[25][250];
char s1[250];
char s2[250];
int m;
char mi[250];
scanf( "%d",&t );
for ( i=0;i<t;i++ ) {
scanf( "%d",&n );
for ( j=0;j<n;j++ ) {
scanf( "%s",&str[j] );
}
for ( m=0;m<n;m++ ) {
for ( j=0;j<n-m-1;j++ ) {
strcpy(s1,str[j]);
strcpy(s2,str[j+1]);
strcat(s1,str[j+1]);
strcat(s2,str[j]);
k=strcmp(s1,s2);
if ( k>0 ) {
strcpy(mi,str[j]);
strcpy(str[j],str[j+1]);
strcpy(str[j+1],mi);
}
}
}
for ( m=0;m<n;m++ ) {
printf( "%s",str[m] );
}
printf( "\n" );
}
return 0;
}