自己编译了很多次,输入输出样例试了,第一个测试点我也下载下来试了,结果都是对的,但提交后得了0分_(´ཀ`」 ∠)_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>//第一次用这个头文件
//(从题解中抄来的一种思想)比较谁在前,对字典序的贡献更大
char* mix(const char* n1,const char* n2)//将n2拼接到n1后面,返回拼接后的字符串,不改变n1与n2
{
int length=strlen(n1)+strlen(n2)+1;
char* temp=(char*)malloc(length*sizeof(char));
strcpy(temp,n1);
while(*temp)
temp++;
while(*n2)
{
*temp++=*n2++;
}
*temp='\0';
return temp-length;
}
void swap(char** n1,char** n2)//调用该函数时,传递的应为指针的地址
{
char* temp;
temp=*n1;
*n1=*n2;
*n2=temp;
}
int main()
{
int n;//数字个数
scanf("%d",&n);
char* N[n+1];
for(int i=1;i<=n;i++)
{
N[i]=(char*)malloc(20*sizeof(char));
scanf("%s",N[i]);//
}
for(int i=1;i<n;i++)
{
for(int x=i+1;x<=n;x++)
{
if(strcmp(mix(N[i],N[x]),mix(N[x],N[i]))<0)//如果这两个数按当前顺序排列不是局部最优解
{
swap(&N[i],&N[x]);//交换位置
continue;
}
else
continue;
}
}
for(int i=1;i<=n;i++)
printf("%s",N[i]);
return 0;
}