Sicily 1198 Substring

题目要求输出的组合字符串具有最小字典序,其实就是把题目给出的字符串进行排序。考虑输入只有两个字符串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;
}

你可能感兴趣的:(扩展)