心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0

给出若干个字符串,给出一个排列,使排列后的字符串字典序最小。如"b","ba",则"bab"的字典序最小。

考虑用排序解决,但是不是按字典序排序。若strcat(A,B)<strcat(B,A),则A<B,按照此规则排序,最后顺序输出即可。

以下是我的代码:
#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;
}

posted on 2010-01-06 19:40 lee1r 阅读(168) 评论(0)  编辑 收藏 引用 所属分类: 题目分类:数据结构

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理