为什么会这样呢(´;ω;`)
查看原帖
为什么会这样呢(´;ω;`)
1383645
Eustiawhite楼主2024/7/27 15:48

自己编译了很多次,输入输出样例试了,第一个测试点我也下载下来试了,结果都是对的,但提交后得了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;
}






2024/7/27 15:48
加载中...