给出若干个字符串,给出一个排列,使排列后的字符串字典序最小。如"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) 编辑 收藏 引用 所属分类:
题目分类:数据结构